; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
; RUN: llc -mtriple=powerpc64le-linux-gnu -mcpu=pwr8 -verify-machineinstrs \
; RUN:   < %s | FileCheck %s
; RUN: llc -mtriple=powerpc-aix- -mcpu=pwr7 -verify-machineinstrs \
; RUN:   < %s | FileCheck %s --check-prefix=AIX32
; ModuleID = '../clang/test/CodeGen/Atomics.c'

@sc = dso_local global i8 0, align 1
@uc = dso_local global i8 0, align 1
@ss = dso_local global i16 0, align 2
@us = dso_local global i16 0, align 2
@si = dso_local global i32 0, align 4
@ui = dso_local global i32 0, align 4
@sll = dso_local global i64 0, align 8
@ull = dso_local global i64 0, align 8
@u128 = dso_local global i128 0, align 16
@s128 = dso_local global i128 0, align 16

define dso_local void @test_op_ignore() local_unnamed_addr #0 {
; CHECK-LABEL: test_op_ignore:
; CHECK:       # %bb.0: # %entry
; CHECK-NEXT:    addis 3, 2, sc@toc@ha
; CHECK-NEXT:    std 26, -48(1) # 8-byte Folded Spill
; CHECK-NEXT:    std 27, -40(1) # 8-byte Folded Spill
; CHECK-NEXT:    std 28, -32(1) # 8-byte Folded Spill
; CHECK-NEXT:    std 29, -24(1) # 8-byte Folded Spill
; CHECK-NEXT:    addi 4, 3, sc@toc@l
; CHECK-NEXT:    li 3, 1
; CHECK-NEXT:    std 30, -16(1) # 8-byte Folded Spill
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB0_1: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lbarx 5, 0, 4
; CHECK-NEXT:    addi 5, 5, 1
; CHECK-NEXT:    stbcx. 5, 0, 4
; CHECK-NEXT:    bne 0, .LBB0_1
; CHECK-NEXT:  # %bb.2: # %entry
; CHECK-NEXT:    addis 5, 2, uc@toc@ha
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    addi 5, 5, uc@toc@l
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB0_3: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lbarx 6, 0, 5
; CHECK-NEXT:    addi 6, 6, 1
; CHECK-NEXT:    stbcx. 6, 0, 5
; CHECK-NEXT:    bne 0, .LBB0_3
; CHECK-NEXT:  # %bb.4: # %entry
; CHECK-NEXT:    addis 6, 2, ss@toc@ha
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    addi 6, 6, ss@toc@l
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB0_5: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lharx 7, 0, 6
; CHECK-NEXT:    addi 7, 7, 1
; CHECK-NEXT:    sthcx. 7, 0, 6
; CHECK-NEXT:    bne 0, .LBB0_5
; CHECK-NEXT:  # %bb.6: # %entry
; CHECK-NEXT:    addis 7, 2, us@toc@ha
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    addi 8, 7, us@toc@l
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB0_7: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lharx 7, 0, 8
; CHECK-NEXT:    addi 7, 7, 1
; CHECK-NEXT:    sthcx. 7, 0, 8
; CHECK-NEXT:    bne 0, .LBB0_7
; CHECK-NEXT:  # %bb.8: # %entry
; CHECK-NEXT:    addis 7, 2, si@toc@ha
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    addi 9, 7, si@toc@l
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB0_9: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lwarx 7, 0, 9
; CHECK-NEXT:    addi 7, 7, 1
; CHECK-NEXT:    stwcx. 7, 0, 9
; CHECK-NEXT:    bne 0, .LBB0_9
; CHECK-NEXT:  # %bb.10: # %entry
; CHECK-NEXT:    addis 7, 2, ui@toc@ha
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    addi 10, 7, ui@toc@l
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB0_11: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lwarx 7, 0, 10
; CHECK-NEXT:    addi 7, 7, 1
; CHECK-NEXT:    stwcx. 7, 0, 10
; CHECK-NEXT:    bne 0, .LBB0_11
; CHECK-NEXT:  # %bb.12: # %entry
; CHECK-NEXT:    addis 7, 2, sll@toc@ha
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    addi 11, 7, sll@toc@l
; CHECK-NEXT:    li 7, 1
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB0_13: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    ldarx 12, 0, 11
; CHECK-NEXT:    addi 12, 12, 1
; CHECK-NEXT:    stdcx. 12, 0, 11
; CHECK-NEXT:    bne 0, .LBB0_13
; CHECK-NEXT:  # %bb.14: # %entry
; CHECK-NEXT:    addis 12, 2, ull@toc@ha
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    addi 12, 12, ull@toc@l
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB0_15: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    ldarx 30, 0, 12
; CHECK-NEXT:    addi 0, 30, 1
; CHECK-NEXT:    stdcx. 0, 0, 12
; CHECK-NEXT:    bne 0, .LBB0_15
; CHECK-NEXT:  # %bb.16: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB0_17: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lbarx 0, 0, 4
; CHECK-NEXT:    sub 0, 0, 3
; CHECK-NEXT:    stbcx. 0, 0, 4
; CHECK-NEXT:    bne 0, .LBB0_17
; CHECK-NEXT:  # %bb.18: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB0_19: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lbarx 0, 0, 5
; CHECK-NEXT:    sub 0, 0, 3
; CHECK-NEXT:    stbcx. 0, 0, 5
; CHECK-NEXT:    bne 0, .LBB0_19
; CHECK-NEXT:  # %bb.20: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB0_21: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lharx 0, 0, 6
; CHECK-NEXT:    sub 0, 0, 3
; CHECK-NEXT:    sthcx. 0, 0, 6
; CHECK-NEXT:    bne 0, .LBB0_21
; CHECK-NEXT:  # %bb.22: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB0_23: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lharx 0, 0, 8
; CHECK-NEXT:    sub 0, 0, 3
; CHECK-NEXT:    sthcx. 0, 0, 8
; CHECK-NEXT:    bne 0, .LBB0_23
; CHECK-NEXT:  # %bb.24: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB0_25: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lwarx 0, 0, 9
; CHECK-NEXT:    sub 0, 0, 3
; CHECK-NEXT:    stwcx. 0, 0, 9
; CHECK-NEXT:    bne 0, .LBB0_25
; CHECK-NEXT:  # %bb.26: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB0_27: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lwarx 0, 0, 10
; CHECK-NEXT:    sub 0, 0, 3
; CHECK-NEXT:    stwcx. 0, 0, 10
; CHECK-NEXT:    bne 0, .LBB0_27
; CHECK-NEXT:  # %bb.28: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB0_29: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    ldarx 0, 0, 11
; CHECK-NEXT:    sub 0, 0, 7
; CHECK-NEXT:    stdcx. 0, 0, 11
; CHECK-NEXT:    bne 0, .LBB0_29
; CHECK-NEXT:  # %bb.30: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB0_31: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    ldarx 0, 0, 12
; CHECK-NEXT:    sub 0, 0, 7
; CHECK-NEXT:    stdcx. 0, 0, 12
; CHECK-NEXT:    bne 0, .LBB0_31
; CHECK-NEXT:  # %bb.32: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB0_33: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lbarx 0, 0, 4
; CHECK-NEXT:    ori 0, 0, 1
; CHECK-NEXT:    stbcx. 0, 0, 4
; CHECK-NEXT:    bne 0, .LBB0_33
; CHECK-NEXT:  # %bb.34: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB0_35: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lbarx 0, 0, 5
; CHECK-NEXT:    ori 0, 0, 1
; CHECK-NEXT:    stbcx. 0, 0, 5
; CHECK-NEXT:    bne 0, .LBB0_35
; CHECK-NEXT:  # %bb.36: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB0_37: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lharx 0, 0, 6
; CHECK-NEXT:    ori 0, 0, 1
; CHECK-NEXT:    sthcx. 0, 0, 6
; CHECK-NEXT:    bne 0, .LBB0_37
; CHECK-NEXT:  # %bb.38: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB0_39: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lharx 0, 0, 8
; CHECK-NEXT:    ori 0, 0, 1
; CHECK-NEXT:    sthcx. 0, 0, 8
; CHECK-NEXT:    bne 0, .LBB0_39
; CHECK-NEXT:  # %bb.40: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB0_41: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lwarx 0, 0, 9
; CHECK-NEXT:    ori 0, 0, 1
; CHECK-NEXT:    stwcx. 0, 0, 9
; CHECK-NEXT:    bne 0, .LBB0_41
; CHECK-NEXT:  # %bb.42: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB0_43: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lwarx 0, 0, 10
; CHECK-NEXT:    ori 0, 0, 1
; CHECK-NEXT:    stwcx. 0, 0, 10
; CHECK-NEXT:    bne 0, .LBB0_43
; CHECK-NEXT:  # %bb.44: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB0_45: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    ldarx 0, 0, 11
; CHECK-NEXT:    ori 0, 0, 1
; CHECK-NEXT:    stdcx. 0, 0, 11
; CHECK-NEXT:    bne 0, .LBB0_45
; CHECK-NEXT:  # %bb.46: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB0_47: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    ldarx 0, 0, 12
; CHECK-NEXT:    ori 0, 0, 1
; CHECK-NEXT:    stdcx. 0, 0, 12
; CHECK-NEXT:    bne 0, .LBB0_47
; CHECK-NEXT:  # %bb.48: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB0_49: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lbarx 0, 0, 4
; CHECK-NEXT:    xori 0, 0, 1
; CHECK-NEXT:    stbcx. 0, 0, 4
; CHECK-NEXT:    bne 0, .LBB0_49
; CHECK-NEXT:  # %bb.50: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB0_51: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lbarx 0, 0, 5
; CHECK-NEXT:    xori 0, 0, 1
; CHECK-NEXT:    stbcx. 0, 0, 5
; CHECK-NEXT:    bne 0, .LBB0_51
; CHECK-NEXT:  # %bb.52: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB0_53: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lharx 0, 0, 6
; CHECK-NEXT:    xori 0, 0, 1
; CHECK-NEXT:    sthcx. 0, 0, 6
; CHECK-NEXT:    bne 0, .LBB0_53
; CHECK-NEXT:  # %bb.54: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB0_55: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lharx 0, 0, 8
; CHECK-NEXT:    xori 0, 0, 1
; CHECK-NEXT:    sthcx. 0, 0, 8
; CHECK-NEXT:    bne 0, .LBB0_55
; CHECK-NEXT:  # %bb.56: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB0_57: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lwarx 0, 0, 9
; CHECK-NEXT:    xori 0, 0, 1
; CHECK-NEXT:    stwcx. 0, 0, 9
; CHECK-NEXT:    bne 0, .LBB0_57
; CHECK-NEXT:  # %bb.58: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB0_59: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lwarx 0, 0, 10
; CHECK-NEXT:    xori 0, 0, 1
; CHECK-NEXT:    stwcx. 0, 0, 10
; CHECK-NEXT:    bne 0, .LBB0_59
; CHECK-NEXT:  # %bb.60: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB0_61: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    ldarx 0, 0, 11
; CHECK-NEXT:    xori 0, 0, 1
; CHECK-NEXT:    stdcx. 0, 0, 11
; CHECK-NEXT:    bne 0, .LBB0_61
; CHECK-NEXT:  # %bb.62: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB0_63: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    ldarx 0, 0, 12
; CHECK-NEXT:    xori 0, 0, 1
; CHECK-NEXT:    stdcx. 0, 0, 12
; CHECK-NEXT:    bne 0, .LBB0_63
; CHECK-NEXT:  # %bb.64: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    addis 30, 2, u128@toc@ha
; CHECK-NEXT:    sync
; CHECK-NEXT:    addi 0, 30, u128@toc@l
; CHECK-NEXT:    li 30, 0
; CHECK-NEXT:  .LBB0_65: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lqarx 28, 0, 0
; CHECK-NEXT:    xor 27, 7, 29
; CHECK-NEXT:    xor 26, 30, 28
; CHECK-NEXT:    stqcx. 26, 0, 0
; CHECK-NEXT:    bne 0, .LBB0_65
; CHECK-NEXT:  # %bb.66: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    addis 29, 2, s128@toc@ha
; CHECK-NEXT:    sync
; CHECK-NEXT:    addi 0, 29, s128@toc@l
; CHECK-NEXT:  .LBB0_67: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lqarx 28, 0, 0
; CHECK-NEXT:    xor 27, 7, 29
; CHECK-NEXT:    xor 26, 30, 28
; CHECK-NEXT:    stqcx. 26, 0, 0
; CHECK-NEXT:    bne 0, .LBB0_67
; CHECK-NEXT:  # %bb.68: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB0_69: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lbarx 0, 0, 4
; CHECK-NEXT:    nand 0, 3, 0
; CHECK-NEXT:    stbcx. 0, 0, 4
; CHECK-NEXT:    bne 0, .LBB0_69
; CHECK-NEXT:  # %bb.70: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB0_71: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lbarx 0, 0, 5
; CHECK-NEXT:    nand 0, 3, 0
; CHECK-NEXT:    stbcx. 0, 0, 5
; CHECK-NEXT:    bne 0, .LBB0_71
; CHECK-NEXT:  # %bb.72: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB0_73: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lharx 0, 0, 6
; CHECK-NEXT:    nand 0, 3, 0
; CHECK-NEXT:    sthcx. 0, 0, 6
; CHECK-NEXT:    bne 0, .LBB0_73
; CHECK-NEXT:  # %bb.74: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB0_75: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lharx 0, 0, 8
; CHECK-NEXT:    nand 0, 3, 0
; CHECK-NEXT:    sthcx. 0, 0, 8
; CHECK-NEXT:    bne 0, .LBB0_75
; CHECK-NEXT:  # %bb.76: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB0_77: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lwarx 0, 0, 9
; CHECK-NEXT:    nand 0, 3, 0
; CHECK-NEXT:    stwcx. 0, 0, 9
; CHECK-NEXT:    bne 0, .LBB0_77
; CHECK-NEXT:  # %bb.78: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB0_79: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lwarx 0, 0, 10
; CHECK-NEXT:    nand 0, 3, 0
; CHECK-NEXT:    stwcx. 0, 0, 10
; CHECK-NEXT:    bne 0, .LBB0_79
; CHECK-NEXT:  # %bb.80: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB0_81: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    ldarx 0, 0, 11
; CHECK-NEXT:    nand 0, 7, 0
; CHECK-NEXT:    stdcx. 0, 0, 11
; CHECK-NEXT:    bne 0, .LBB0_81
; CHECK-NEXT:  # %bb.82: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB0_83: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    ldarx 0, 0, 12
; CHECK-NEXT:    nand 0, 7, 0
; CHECK-NEXT:    stdcx. 0, 0, 12
; CHECK-NEXT:    bne 0, .LBB0_83
; CHECK-NEXT:  # %bb.84: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB0_85: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lbarx 0, 0, 4
; CHECK-NEXT:    and 0, 3, 0
; CHECK-NEXT:    stbcx. 0, 0, 4
; CHECK-NEXT:    bne 0, .LBB0_85
; CHECK-NEXT:  # %bb.86: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB0_87: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lbarx 4, 0, 5
; CHECK-NEXT:    and 4, 3, 4
; CHECK-NEXT:    stbcx. 4, 0, 5
; CHECK-NEXT:    bne 0, .LBB0_87
; CHECK-NEXT:  # %bb.88: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB0_89: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lharx 4, 0, 6
; CHECK-NEXT:    and 4, 3, 4
; CHECK-NEXT:    sthcx. 4, 0, 6
; CHECK-NEXT:    bne 0, .LBB0_89
; CHECK-NEXT:  # %bb.90: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB0_91: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lharx 4, 0, 8
; CHECK-NEXT:    and 4, 3, 4
; CHECK-NEXT:    sthcx. 4, 0, 8
; CHECK-NEXT:    bne 0, .LBB0_91
; CHECK-NEXT:  # %bb.92: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB0_93: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lwarx 4, 0, 9
; CHECK-NEXT:    and 4, 3, 4
; CHECK-NEXT:    stwcx. 4, 0, 9
; CHECK-NEXT:    bne 0, .LBB0_93
; CHECK-NEXT:  # %bb.94: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB0_95: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lwarx 4, 0, 10
; CHECK-NEXT:    and 4, 3, 4
; CHECK-NEXT:    stwcx. 4, 0, 10
; CHECK-NEXT:    bne 0, .LBB0_95
; CHECK-NEXT:  # %bb.96: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB0_97: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    ldarx 3, 0, 11
; CHECK-NEXT:    and 3, 7, 3
; CHECK-NEXT:    stdcx. 3, 0, 11
; CHECK-NEXT:    bne 0, .LBB0_97
; CHECK-NEXT:  # %bb.98: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB0_99: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    ldarx 3, 0, 12
; CHECK-NEXT:    and 3, 7, 3
; CHECK-NEXT:    stdcx. 3, 0, 12
; CHECK-NEXT:    bne 0, .LBB0_99
; CHECK-NEXT:  # %bb.100: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    ld 30, -16(1) # 8-byte Folded Reload
; CHECK-NEXT:    ld 29, -24(1) # 8-byte Folded Reload
; CHECK-NEXT:    ld 28, -32(1) # 8-byte Folded Reload
; CHECK-NEXT:    ld 27, -40(1) # 8-byte Folded Reload
; CHECK-NEXT:    ld 26, -48(1) # 8-byte Folded Reload
; CHECK-NEXT:    blr
;
; AIX32-LABEL: test_op_ignore:
; AIX32:       # %bb.0: # %entry
; AIX32-NEXT:    mflr 0
; AIX32-NEXT:    stwu 1, -160(1)
; AIX32-NEXT:    lwz 3, L..C0(2) # @sc
; AIX32-NEXT:    stw 0, 168(1)
; AIX32-NEXT:    stw 15, 92(1) # 4-byte Folded Spill
; AIX32-NEXT:    stw 26, 136(1) # 4-byte Folded Spill
; AIX32-NEXT:    stw 28, 144(1) # 4-byte Folded Spill
; AIX32-NEXT:    li 15, 1
; AIX32-NEXT:    stw 16, 96(1) # 4-byte Folded Spill
; AIX32-NEXT:    rlwinm 4, 3, 3, 27, 28
; AIX32-NEXT:    rlwinm 28, 3, 0, 0, 29
; AIX32-NEXT:    li 3, 255
; AIX32-NEXT:    xori 26, 4, 24
; AIX32-NEXT:    stw 17, 100(1) # 4-byte Folded Spill
; AIX32-NEXT:    stw 18, 104(1) # 4-byte Folded Spill
; AIX32-NEXT:    stw 19, 108(1) # 4-byte Folded Spill
; AIX32-NEXT:    stw 20, 112(1) # 4-byte Folded Spill
; AIX32-NEXT:    stw 21, 116(1) # 4-byte Folded Spill
; AIX32-NEXT:    stw 22, 120(1) # 4-byte Folded Spill
; AIX32-NEXT:    stw 23, 124(1) # 4-byte Folded Spill
; AIX32-NEXT:    stw 24, 128(1) # 4-byte Folded Spill
; AIX32-NEXT:    stw 25, 132(1) # 4-byte Folded Spill
; AIX32-NEXT:    stw 27, 140(1) # 4-byte Folded Spill
; AIX32-NEXT:    stw 29, 148(1) # 4-byte Folded Spill
; AIX32-NEXT:    stw 30, 152(1) # 4-byte Folded Spill
; AIX32-NEXT:    stw 31, 156(1) # 4-byte Folded Spill
; AIX32-NEXT:    slw 29, 15, 26
; AIX32-NEXT:    slw 3, 3, 26
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB0_1: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 4, 0, 28
; AIX32-NEXT:    add 5, 29, 4
; AIX32-NEXT:    andc 4, 4, 3
; AIX32-NEXT:    and 5, 5, 3
; AIX32-NEXT:    or 4, 5, 4
; AIX32-NEXT:    stwcx. 4, 0, 28
; AIX32-NEXT:    bne 0, L..BB0_1
; AIX32-NEXT:  # %bb.2: # %entry
; AIX32-NEXT:    lwz 3, L..C1(2) # @uc
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    sync
; AIX32-NEXT:    rlwinm 4, 3, 3, 27, 28
; AIX32-NEXT:    rlwinm 27, 3, 0, 0, 29
; AIX32-NEXT:    li 3, 255
; AIX32-NEXT:    xori 24, 4, 24
; AIX32-NEXT:    slw 18, 15, 24
; AIX32-NEXT:    slw 3, 3, 24
; AIX32-NEXT:  L..BB0_3: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 4, 0, 27
; AIX32-NEXT:    add 5, 18, 4
; AIX32-NEXT:    andc 4, 4, 3
; AIX32-NEXT:    and 5, 5, 3
; AIX32-NEXT:    or 4, 5, 4
; AIX32-NEXT:    stwcx. 4, 0, 27
; AIX32-NEXT:    bne 0, L..BB0_3
; AIX32-NEXT:  # %bb.4: # %entry
; AIX32-NEXT:    lwz 3, L..C2(2) # @ss
; AIX32-NEXT:    li 5, 0
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    sync
; AIX32-NEXT:    rlwinm 4, 3, 3, 27, 27
; AIX32-NEXT:    rlwinm 25, 3, 0, 0, 29
; AIX32-NEXT:    ori 3, 5, 65535
; AIX32-NEXT:    xori 22, 4, 16
; AIX32-NEXT:    slw 17, 15, 22
; AIX32-NEXT:    slw 3, 3, 22
; AIX32-NEXT:  L..BB0_5: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 4, 0, 25
; AIX32-NEXT:    add 5, 17, 4
; AIX32-NEXT:    andc 4, 4, 3
; AIX32-NEXT:    and 5, 5, 3
; AIX32-NEXT:    or 4, 5, 4
; AIX32-NEXT:    stwcx. 4, 0, 25
; AIX32-NEXT:    bne 0, L..BB0_5
; AIX32-NEXT:  # %bb.6: # %entry
; AIX32-NEXT:    lwz 3, L..C3(2) # @us
; AIX32-NEXT:    li 5, 0
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    sync
; AIX32-NEXT:    rlwinm 4, 3, 3, 27, 27
; AIX32-NEXT:    rlwinm 23, 3, 0, 0, 29
; AIX32-NEXT:    ori 3, 5, 65535
; AIX32-NEXT:    xori 19, 4, 16
; AIX32-NEXT:    slw 16, 15, 19
; AIX32-NEXT:    slw 3, 3, 19
; AIX32-NEXT:  L..BB0_7: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 4, 0, 23
; AIX32-NEXT:    add 5, 16, 4
; AIX32-NEXT:    andc 4, 4, 3
; AIX32-NEXT:    and 5, 5, 3
; AIX32-NEXT:    or 4, 5, 4
; AIX32-NEXT:    stwcx. 4, 0, 23
; AIX32-NEXT:    bne 0, L..BB0_7
; AIX32-NEXT:  # %bb.8: # %entry
; AIX32-NEXT:    lwz 21, L..C4(2) # @si
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB0_9: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 3, 0, 21
; AIX32-NEXT:    addi 3, 3, 1
; AIX32-NEXT:    stwcx. 3, 0, 21
; AIX32-NEXT:    bne 0, L..BB0_9
; AIX32-NEXT:  # %bb.10: # %entry
; AIX32-NEXT:    lwz 20, L..C5(2) # @ui
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB0_11: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 3, 0, 20
; AIX32-NEXT:    addi 3, 3, 1
; AIX32-NEXT:    stwcx. 3, 0, 20
; AIX32-NEXT:    bne 0, L..BB0_11
; AIX32-NEXT:  # %bb.12: # %entry
; AIX32-NEXT:    lwz 31, L..C6(2) # @sll
; AIX32-NEXT:    li 4, 0
; AIX32-NEXT:    li 5, 1
; AIX32-NEXT:    li 6, 5
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    mr 3, 31
; AIX32-NEXT:    bl .__atomic_fetch_add_8[PR]
; AIX32-NEXT:    nop
; AIX32-NEXT:    lwz 30, L..C7(2) # @ull
; AIX32-NEXT:    li 4, 0
; AIX32-NEXT:    li 5, 1
; AIX32-NEXT:    li 6, 5
; AIX32-NEXT:    mr 3, 30
; AIX32-NEXT:    bl .__atomic_fetch_add_8[PR]
; AIX32-NEXT:    nop
; AIX32-NEXT:    li 3, 255
; AIX32-NEXT:    sync
; AIX32-NEXT:    slw 3, 3, 26
; AIX32-NEXT:  L..BB0_13: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 4, 0, 28
; AIX32-NEXT:    sub 5, 4, 29
; AIX32-NEXT:    andc 4, 4, 3
; AIX32-NEXT:    and 5, 5, 3
; AIX32-NEXT:    or 4, 5, 4
; AIX32-NEXT:    stwcx. 4, 0, 28
; AIX32-NEXT:    bne 0, L..BB0_13
; AIX32-NEXT:  # %bb.14: # %entry
; AIX32-NEXT:    li 3, 255
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    slw 3, 3, 24
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB0_15: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 4, 0, 27
; AIX32-NEXT:    sub 5, 4, 18
; AIX32-NEXT:    andc 4, 4, 3
; AIX32-NEXT:    and 5, 5, 3
; AIX32-NEXT:    or 4, 5, 4
; AIX32-NEXT:    stwcx. 4, 0, 27
; AIX32-NEXT:    bne 0, L..BB0_15
; AIX32-NEXT:  # %bb.16: # %entry
; AIX32-NEXT:    li 3, 0
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    ori 3, 3, 65535
; AIX32-NEXT:    sync
; AIX32-NEXT:    slw 3, 3, 22
; AIX32-NEXT:  L..BB0_17: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 4, 0, 25
; AIX32-NEXT:    sub 5, 4, 17
; AIX32-NEXT:    andc 4, 4, 3
; AIX32-NEXT:    and 5, 5, 3
; AIX32-NEXT:    or 4, 5, 4
; AIX32-NEXT:    stwcx. 4, 0, 25
; AIX32-NEXT:    bne 0, L..BB0_17
; AIX32-NEXT:  # %bb.18: # %entry
; AIX32-NEXT:    li 3, 0
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    ori 3, 3, 65535
; AIX32-NEXT:    sync
; AIX32-NEXT:    slw 3, 3, 19
; AIX32-NEXT:  L..BB0_19: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 4, 0, 23
; AIX32-NEXT:    sub 5, 4, 16
; AIX32-NEXT:    andc 4, 4, 3
; AIX32-NEXT:    and 5, 5, 3
; AIX32-NEXT:    or 4, 5, 4
; AIX32-NEXT:    stwcx. 4, 0, 23
; AIX32-NEXT:    bne 0, L..BB0_19
; AIX32-NEXT:  # %bb.20: # %entry
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB0_21: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 3, 0, 21
; AIX32-NEXT:    sub 3, 3, 15
; AIX32-NEXT:    stwcx. 3, 0, 21
; AIX32-NEXT:    bne 0, L..BB0_21
; AIX32-NEXT:  # %bb.22: # %entry
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB0_23: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 3, 0, 20
; AIX32-NEXT:    sub 3, 3, 15
; AIX32-NEXT:    stwcx. 3, 0, 20
; AIX32-NEXT:    bne 0, L..BB0_23
; AIX32-NEXT:  # %bb.24: # %entry
; AIX32-NEXT:    mr 3, 31
; AIX32-NEXT:    li 4, 0
; AIX32-NEXT:    li 5, 1
; AIX32-NEXT:    li 6, 5
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    bl .__atomic_fetch_sub_8[PR]
; AIX32-NEXT:    nop
; AIX32-NEXT:    mr 3, 30
; AIX32-NEXT:    li 4, 0
; AIX32-NEXT:    li 5, 1
; AIX32-NEXT:    li 6, 5
; AIX32-NEXT:    bl .__atomic_fetch_sub_8[PR]
; AIX32-NEXT:    nop
; AIX32-NEXT:    li 3, 255
; AIX32-NEXT:    sync
; AIX32-NEXT:    slw 3, 3, 26
; AIX32-NEXT:  L..BB0_25: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 4, 0, 28
; AIX32-NEXT:    or 5, 29, 4
; AIX32-NEXT:    andc 4, 4, 3
; AIX32-NEXT:    and 5, 5, 3
; AIX32-NEXT:    or 4, 5, 4
; AIX32-NEXT:    stwcx. 4, 0, 28
; AIX32-NEXT:    bne 0, L..BB0_25
; AIX32-NEXT:  # %bb.26: # %entry
; AIX32-NEXT:    li 3, 255
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    slw 3, 3, 24
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB0_27: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 4, 0, 27
; AIX32-NEXT:    or 5, 18, 4
; AIX32-NEXT:    andc 4, 4, 3
; AIX32-NEXT:    and 5, 5, 3
; AIX32-NEXT:    or 4, 5, 4
; AIX32-NEXT:    stwcx. 4, 0, 27
; AIX32-NEXT:    bne 0, L..BB0_27
; AIX32-NEXT:  # %bb.28: # %entry
; AIX32-NEXT:    li 3, 0
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    ori 3, 3, 65535
; AIX32-NEXT:    sync
; AIX32-NEXT:    slw 3, 3, 22
; AIX32-NEXT:  L..BB0_29: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 4, 0, 25
; AIX32-NEXT:    or 5, 17, 4
; AIX32-NEXT:    andc 4, 4, 3
; AIX32-NEXT:    and 5, 5, 3
; AIX32-NEXT:    or 4, 5, 4
; AIX32-NEXT:    stwcx. 4, 0, 25
; AIX32-NEXT:    bne 0, L..BB0_29
; AIX32-NEXT:  # %bb.30: # %entry
; AIX32-NEXT:    li 3, 0
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    ori 3, 3, 65535
; AIX32-NEXT:    sync
; AIX32-NEXT:    slw 3, 3, 19
; AIX32-NEXT:  L..BB0_31: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 4, 0, 23
; AIX32-NEXT:    or 5, 16, 4
; AIX32-NEXT:    andc 4, 4, 3
; AIX32-NEXT:    and 5, 5, 3
; AIX32-NEXT:    or 4, 5, 4
; AIX32-NEXT:    stwcx. 4, 0, 23
; AIX32-NEXT:    bne 0, L..BB0_31
; AIX32-NEXT:  # %bb.32: # %entry
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB0_33: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 3, 0, 21
; AIX32-NEXT:    ori 3, 3, 1
; AIX32-NEXT:    stwcx. 3, 0, 21
; AIX32-NEXT:    bne 0, L..BB0_33
; AIX32-NEXT:  # %bb.34: # %entry
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB0_35: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 3, 0, 20
; AIX32-NEXT:    ori 3, 3, 1
; AIX32-NEXT:    stwcx. 3, 0, 20
; AIX32-NEXT:    bne 0, L..BB0_35
; AIX32-NEXT:  # %bb.36: # %entry
; AIX32-NEXT:    mr 3, 31
; AIX32-NEXT:    li 4, 0
; AIX32-NEXT:    li 5, 1
; AIX32-NEXT:    li 6, 5
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    bl .__atomic_fetch_or_8[PR]
; AIX32-NEXT:    nop
; AIX32-NEXT:    mr 3, 30
; AIX32-NEXT:    li 4, 0
; AIX32-NEXT:    li 5, 1
; AIX32-NEXT:    li 6, 5
; AIX32-NEXT:    bl .__atomic_fetch_or_8[PR]
; AIX32-NEXT:    nop
; AIX32-NEXT:    li 3, 255
; AIX32-NEXT:    sync
; AIX32-NEXT:    slw 3, 3, 26
; AIX32-NEXT:  L..BB0_37: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 4, 0, 28
; AIX32-NEXT:    xor 5, 29, 4
; AIX32-NEXT:    andc 4, 4, 3
; AIX32-NEXT:    and 5, 5, 3
; AIX32-NEXT:    or 4, 5, 4
; AIX32-NEXT:    stwcx. 4, 0, 28
; AIX32-NEXT:    bne 0, L..BB0_37
; AIX32-NEXT:  # %bb.38: # %entry
; AIX32-NEXT:    li 3, 255
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    slw 3, 3, 24
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB0_39: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 4, 0, 27
; AIX32-NEXT:    xor 5, 18, 4
; AIX32-NEXT:    andc 4, 4, 3
; AIX32-NEXT:    and 5, 5, 3
; AIX32-NEXT:    or 4, 5, 4
; AIX32-NEXT:    stwcx. 4, 0, 27
; AIX32-NEXT:    bne 0, L..BB0_39
; AIX32-NEXT:  # %bb.40: # %entry
; AIX32-NEXT:    li 3, 0
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    ori 3, 3, 65535
; AIX32-NEXT:    sync
; AIX32-NEXT:    slw 3, 3, 22
; AIX32-NEXT:  L..BB0_41: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 4, 0, 25
; AIX32-NEXT:    xor 5, 17, 4
; AIX32-NEXT:    andc 4, 4, 3
; AIX32-NEXT:    and 5, 5, 3
; AIX32-NEXT:    or 4, 5, 4
; AIX32-NEXT:    stwcx. 4, 0, 25
; AIX32-NEXT:    bne 0, L..BB0_41
; AIX32-NEXT:  # %bb.42: # %entry
; AIX32-NEXT:    li 3, 0
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    ori 3, 3, 65535
; AIX32-NEXT:    sync
; AIX32-NEXT:    slw 3, 3, 19
; AIX32-NEXT:  L..BB0_43: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 4, 0, 23
; AIX32-NEXT:    xor 5, 16, 4
; AIX32-NEXT:    andc 4, 4, 3
; AIX32-NEXT:    and 5, 5, 3
; AIX32-NEXT:    or 4, 5, 4
; AIX32-NEXT:    stwcx. 4, 0, 23
; AIX32-NEXT:    bne 0, L..BB0_43
; AIX32-NEXT:  # %bb.44: # %entry
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB0_45: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 3, 0, 21
; AIX32-NEXT:    xori 3, 3, 1
; AIX32-NEXT:    stwcx. 3, 0, 21
; AIX32-NEXT:    bne 0, L..BB0_45
; AIX32-NEXT:  # %bb.46: # %entry
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB0_47: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 3, 0, 20
; AIX32-NEXT:    xori 3, 3, 1
; AIX32-NEXT:    stwcx. 3, 0, 20
; AIX32-NEXT:    bne 0, L..BB0_47
; AIX32-NEXT:  # %bb.48: # %entry
; AIX32-NEXT:    mr 3, 31
; AIX32-NEXT:    li 4, 0
; AIX32-NEXT:    li 5, 1
; AIX32-NEXT:    li 6, 5
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    bl .__atomic_fetch_xor_8[PR]
; AIX32-NEXT:    nop
; AIX32-NEXT:    mr 3, 30
; AIX32-NEXT:    li 4, 0
; AIX32-NEXT:    li 5, 1
; AIX32-NEXT:    li 6, 5
; AIX32-NEXT:    bl .__atomic_fetch_xor_8[PR]
; AIX32-NEXT:    nop
; AIX32-NEXT:    lwz 31, L..C8(2) # @u128
; AIX32-NEXT:    addi 30, 1, 72
; AIX32-NEXT:    addi 29, 1, 56
; AIX32-NEXT:    lwz 5, 12(31)
; AIX32-NEXT:    lwz 3, 8(31)
; AIX32-NEXT:    lwz 4, 4(31)
; AIX32-NEXT:    lwz 9, 0(31)
; AIX32-NEXT:    .align 4
; AIX32-NEXT:  L..BB0_49: # %atomicrmw.start
; AIX32-NEXT:    #
; AIX32-NEXT:    xori 6, 5, 1
; AIX32-NEXT:    stw 4, 76(1)
; AIX32-NEXT:    li 7, 5
; AIX32-NEXT:    stw 3, 80(1)
; AIX32-NEXT:    stw 5, 84(1)
; AIX32-NEXT:    stw 3, 64(1)
; AIX32-NEXT:    stw 4, 60(1)
; AIX32-NEXT:    stw 6, 68(1)
; AIX32-NEXT:    li 3, 16
; AIX32-NEXT:    mr 4, 31
; AIX32-NEXT:    mr 5, 30
; AIX32-NEXT:    mr 6, 29
; AIX32-NEXT:    li 8, 5
; AIX32-NEXT:    stw 9, 72(1)
; AIX32-NEXT:    stw 9, 56(1)
; AIX32-NEXT:    bl .__atomic_compare_exchange[PR]
; AIX32-NEXT:    nop
; AIX32-NEXT:    cmplwi 3, 0
; AIX32-NEXT:    lwz 5, 84(1)
; AIX32-NEXT:    lwz 3, 80(1)
; AIX32-NEXT:    lwz 4, 76(1)
; AIX32-NEXT:    lwz 9, 72(1)
; AIX32-NEXT:    beq 0, L..BB0_49
; AIX32-NEXT:  # %bb.50: # %atomicrmw.end
; AIX32-NEXT:    lwz 31, L..C9(2) # @s128
; AIX32-NEXT:    addi 30, 1, 72
; AIX32-NEXT:    addi 29, 1, 56
; AIX32-NEXT:    lwz 5, 12(31)
; AIX32-NEXT:    lwz 3, 8(31)
; AIX32-NEXT:    lwz 4, 4(31)
; AIX32-NEXT:    lwz 9, 0(31)
; AIX32-NEXT:    .align 4
; AIX32-NEXT:  L..BB0_51: # %atomicrmw.start2
; AIX32-NEXT:    #
; AIX32-NEXT:    xori 6, 5, 1
; AIX32-NEXT:    stw 4, 76(1)
; AIX32-NEXT:    li 7, 5
; AIX32-NEXT:    stw 3, 80(1)
; AIX32-NEXT:    stw 5, 84(1)
; AIX32-NEXT:    stw 3, 64(1)
; AIX32-NEXT:    stw 4, 60(1)
; AIX32-NEXT:    stw 6, 68(1)
; AIX32-NEXT:    li 3, 16
; AIX32-NEXT:    mr 4, 31
; AIX32-NEXT:    mr 5, 30
; AIX32-NEXT:    mr 6, 29
; AIX32-NEXT:    li 8, 5
; AIX32-NEXT:    stw 9, 72(1)
; AIX32-NEXT:    stw 9, 56(1)
; AIX32-NEXT:    bl .__atomic_compare_exchange[PR]
; AIX32-NEXT:    nop
; AIX32-NEXT:    cmplwi 3, 0
; AIX32-NEXT:    lwz 5, 84(1)
; AIX32-NEXT:    lwz 3, 80(1)
; AIX32-NEXT:    lwz 4, 76(1)
; AIX32-NEXT:    lwz 9, 72(1)
; AIX32-NEXT:    beq 0, L..BB0_51
; AIX32-NEXT:  # %bb.52: # %atomicrmw.end1
; AIX32-NEXT:    li 29, 1
; AIX32-NEXT:    li 3, 255
; AIX32-NEXT:    sync
; AIX32-NEXT:    slw 18, 29, 26
; AIX32-NEXT:    slw 3, 3, 26
; AIX32-NEXT:  L..BB0_53: # %atomicrmw.end1
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 4, 0, 28
; AIX32-NEXT:    nand 5, 18, 4
; AIX32-NEXT:    andc 4, 4, 3
; AIX32-NEXT:    and 5, 5, 3
; AIX32-NEXT:    or 4, 5, 4
; AIX32-NEXT:    stwcx. 4, 0, 28
; AIX32-NEXT:    bne 0, L..BB0_53
; AIX32-NEXT:  # %bb.54: # %atomicrmw.end1
; AIX32-NEXT:    li 3, 255
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    slw 17, 29, 24
; AIX32-NEXT:    slw 3, 3, 24
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB0_55: # %atomicrmw.end1
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 4, 0, 27
; AIX32-NEXT:    nand 5, 17, 4
; AIX32-NEXT:    andc 4, 4, 3
; AIX32-NEXT:    and 5, 5, 3
; AIX32-NEXT:    or 4, 5, 4
; AIX32-NEXT:    stwcx. 4, 0, 27
; AIX32-NEXT:    bne 0, L..BB0_55
; AIX32-NEXT:  # %bb.56: # %atomicrmw.end1
; AIX32-NEXT:    li 3, 0
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    slw 16, 29, 22
; AIX32-NEXT:    ori 3, 3, 65535
; AIX32-NEXT:    sync
; AIX32-NEXT:    slw 3, 3, 22
; AIX32-NEXT:  L..BB0_57: # %atomicrmw.end1
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 4, 0, 25
; AIX32-NEXT:    nand 5, 16, 4
; AIX32-NEXT:    andc 4, 4, 3
; AIX32-NEXT:    and 5, 5, 3
; AIX32-NEXT:    or 4, 5, 4
; AIX32-NEXT:    stwcx. 4, 0, 25
; AIX32-NEXT:    bne 0, L..BB0_57
; AIX32-NEXT:  # %bb.58: # %atomicrmw.end1
; AIX32-NEXT:    li 3, 0
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    slw 15, 29, 19
; AIX32-NEXT:    ori 3, 3, 65535
; AIX32-NEXT:    sync
; AIX32-NEXT:    slw 3, 3, 19
; AIX32-NEXT:  L..BB0_59: # %atomicrmw.end1
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 4, 0, 23
; AIX32-NEXT:    nand 5, 15, 4
; AIX32-NEXT:    andc 4, 4, 3
; AIX32-NEXT:    and 5, 5, 3
; AIX32-NEXT:    or 4, 5, 4
; AIX32-NEXT:    stwcx. 4, 0, 23
; AIX32-NEXT:    bne 0, L..BB0_59
; AIX32-NEXT:  # %bb.60: # %atomicrmw.end1
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB0_61: # %atomicrmw.end1
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 3, 0, 21
; AIX32-NEXT:    nand 3, 29, 3
; AIX32-NEXT:    stwcx. 3, 0, 21
; AIX32-NEXT:    bne 0, L..BB0_61
; AIX32-NEXT:  # %bb.62: # %atomicrmw.end1
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB0_63: # %atomicrmw.end1
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 3, 0, 20
; AIX32-NEXT:    nand 3, 29, 3
; AIX32-NEXT:    stwcx. 3, 0, 20
; AIX32-NEXT:    bne 0, L..BB0_63
; AIX32-NEXT:  # %bb.64: # %atomicrmw.end1
; AIX32-NEXT:    lwz 31, L..C6(2) # @sll
; AIX32-NEXT:    li 4, 0
; AIX32-NEXT:    li 5, 1
; AIX32-NEXT:    li 6, 5
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    mr 3, 31
; AIX32-NEXT:    bl .__atomic_fetch_nand_8[PR]
; AIX32-NEXT:    nop
; AIX32-NEXT:    lwz 30, L..C7(2) # @ull
; AIX32-NEXT:    li 4, 0
; AIX32-NEXT:    li 5, 1
; AIX32-NEXT:    li 6, 5
; AIX32-NEXT:    mr 3, 30
; AIX32-NEXT:    bl .__atomic_fetch_nand_8[PR]
; AIX32-NEXT:    nop
; AIX32-NEXT:    li 3, 255
; AIX32-NEXT:    sync
; AIX32-NEXT:    slw 3, 3, 26
; AIX32-NEXT:  L..BB0_65: # %atomicrmw.end1
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 4, 0, 28
; AIX32-NEXT:    and 5, 18, 4
; AIX32-NEXT:    andc 4, 4, 3
; AIX32-NEXT:    and 5, 5, 3
; AIX32-NEXT:    or 4, 5, 4
; AIX32-NEXT:    stwcx. 4, 0, 28
; AIX32-NEXT:    bne 0, L..BB0_65
; AIX32-NEXT:  # %bb.66: # %atomicrmw.end1
; AIX32-NEXT:    li 3, 255
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    slw 3, 3, 24
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB0_67: # %atomicrmw.end1
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 4, 0, 27
; AIX32-NEXT:    and 5, 17, 4
; AIX32-NEXT:    andc 4, 4, 3
; AIX32-NEXT:    and 5, 5, 3
; AIX32-NEXT:    or 4, 5, 4
; AIX32-NEXT:    stwcx. 4, 0, 27
; AIX32-NEXT:    bne 0, L..BB0_67
; AIX32-NEXT:  # %bb.68: # %atomicrmw.end1
; AIX32-NEXT:    li 3, 0
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    ori 3, 3, 65535
; AIX32-NEXT:    sync
; AIX32-NEXT:    slw 3, 3, 22
; AIX32-NEXT:  L..BB0_69: # %atomicrmw.end1
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 4, 0, 25
; AIX32-NEXT:    and 5, 16, 4
; AIX32-NEXT:    andc 4, 4, 3
; AIX32-NEXT:    and 5, 5, 3
; AIX32-NEXT:    or 4, 5, 4
; AIX32-NEXT:    stwcx. 4, 0, 25
; AIX32-NEXT:    bne 0, L..BB0_69
; AIX32-NEXT:  # %bb.70: # %atomicrmw.end1
; AIX32-NEXT:    li 3, 0
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    ori 3, 3, 65535
; AIX32-NEXT:    sync
; AIX32-NEXT:    slw 3, 3, 19
; AIX32-NEXT:  L..BB0_71: # %atomicrmw.end1
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 4, 0, 23
; AIX32-NEXT:    and 5, 15, 4
; AIX32-NEXT:    andc 4, 4, 3
; AIX32-NEXT:    and 5, 5, 3
; AIX32-NEXT:    or 4, 5, 4
; AIX32-NEXT:    stwcx. 4, 0, 23
; AIX32-NEXT:    bne 0, L..BB0_71
; AIX32-NEXT:  # %bb.72: # %atomicrmw.end1
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB0_73: # %atomicrmw.end1
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 3, 0, 21
; AIX32-NEXT:    and 3, 29, 3
; AIX32-NEXT:    stwcx. 3, 0, 21
; AIX32-NEXT:    bne 0, L..BB0_73
; AIX32-NEXT:  # %bb.74: # %atomicrmw.end1
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB0_75: # %atomicrmw.end1
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 3, 0, 20
; AIX32-NEXT:    and 3, 29, 3
; AIX32-NEXT:    stwcx. 3, 0, 20
; AIX32-NEXT:    bne 0, L..BB0_75
; AIX32-NEXT:  # %bb.76: # %atomicrmw.end1
; AIX32-NEXT:    mr 3, 31
; AIX32-NEXT:    li 4, 0
; AIX32-NEXT:    li 5, 1
; AIX32-NEXT:    li 6, 5
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    bl .__atomic_fetch_and_8[PR]
; AIX32-NEXT:    nop
; AIX32-NEXT:    mr 3, 30
; AIX32-NEXT:    li 4, 0
; AIX32-NEXT:    li 5, 1
; AIX32-NEXT:    li 6, 5
; AIX32-NEXT:    bl .__atomic_fetch_and_8[PR]
; AIX32-NEXT:    nop
; AIX32-NEXT:    lwz 31, 156(1) # 4-byte Folded Reload
; AIX32-NEXT:    lwz 30, 152(1) # 4-byte Folded Reload
; AIX32-NEXT:    lwz 29, 148(1) # 4-byte Folded Reload
; AIX32-NEXT:    lwz 28, 144(1) # 4-byte Folded Reload
; AIX32-NEXT:    lwz 27, 140(1) # 4-byte Folded Reload
; AIX32-NEXT:    lwz 26, 136(1) # 4-byte Folded Reload
; AIX32-NEXT:    lwz 25, 132(1) # 4-byte Folded Reload
; AIX32-NEXT:    lwz 24, 128(1) # 4-byte Folded Reload
; AIX32-NEXT:    lwz 23, 124(1) # 4-byte Folded Reload
; AIX32-NEXT:    lwz 22, 120(1) # 4-byte Folded Reload
; AIX32-NEXT:    lwz 21, 116(1) # 4-byte Folded Reload
; AIX32-NEXT:    lwz 20, 112(1) # 4-byte Folded Reload
; AIX32-NEXT:    lwz 19, 108(1) # 4-byte Folded Reload
; AIX32-NEXT:    lwz 18, 104(1) # 4-byte Folded Reload
; AIX32-NEXT:    lwz 17, 100(1) # 4-byte Folded Reload
; AIX32-NEXT:    lwz 16, 96(1) # 4-byte Folded Reload
; AIX32-NEXT:    lwz 15, 92(1) # 4-byte Folded Reload
; AIX32-NEXT:    addi 1, 1, 160
; AIX32-NEXT:    lwz 0, 8(1)
; AIX32-NEXT:    mtlr 0
; AIX32-NEXT:    blr
entry:
  %0 = atomicrmw add ptr @sc, i8 1 seq_cst, align 1
  %1 = atomicrmw add ptr @uc, i8 1 seq_cst, align 1
  %2 = atomicrmw add ptr @ss, i16 1 seq_cst, align 2
  %3 = atomicrmw add ptr @us, i16 1 seq_cst, align 2
  %4 = atomicrmw add ptr @si, i32 1 seq_cst, align 4
  %5 = atomicrmw add ptr @ui, i32 1 seq_cst, align 4
  %6 = atomicrmw add ptr @sll, i64 1 seq_cst, align 8
  %7 = atomicrmw add ptr @ull, i64 1 seq_cst, align 8
  %8 = atomicrmw sub ptr @sc, i8 1 seq_cst, align 1
  %9 = atomicrmw sub ptr @uc, i8 1 seq_cst, align 1
  %10 = atomicrmw sub ptr @ss, i16 1 seq_cst, align 2
  %11 = atomicrmw sub ptr @us, i16 1 seq_cst, align 2
  %12 = atomicrmw sub ptr @si, i32 1 seq_cst, align 4
  %13 = atomicrmw sub ptr @ui, i32 1 seq_cst, align 4
  %14 = atomicrmw sub ptr @sll, i64 1 seq_cst, align 8
  %15 = atomicrmw sub ptr @ull, i64 1 seq_cst, align 8
  %16 = atomicrmw or ptr @sc, i8 1 seq_cst, align 1
  %17 = atomicrmw or ptr @uc, i8 1 seq_cst, align 1
  %18 = atomicrmw or ptr @ss, i16 1 seq_cst, align 2
  %19 = atomicrmw or ptr @us, i16 1 seq_cst, align 2
  %20 = atomicrmw or ptr @si, i32 1 seq_cst, align 4
  %21 = atomicrmw or ptr @ui, i32 1 seq_cst, align 4
  %22 = atomicrmw or ptr @sll, i64 1 seq_cst, align 8
  %23 = atomicrmw or ptr @ull, i64 1 seq_cst, align 8
  %24 = atomicrmw xor ptr @sc, i8 1 seq_cst, align 1
  %25 = atomicrmw xor ptr @uc, i8 1 seq_cst, align 1
  %26 = atomicrmw xor ptr @ss, i16 1 seq_cst, align 2
  %27 = atomicrmw xor ptr @us, i16 1 seq_cst, align 2
  %28 = atomicrmw xor ptr @si, i32 1 seq_cst, align 4
  %29 = atomicrmw xor ptr @ui, i32 1 seq_cst, align 4
  %30 = atomicrmw xor ptr @sll, i64 1 seq_cst, align 8
  %31 = atomicrmw xor ptr @ull, i64 1 seq_cst, align 8
  %32 = atomicrmw xor ptr @u128, i128 1 seq_cst, align 16
  %33 = atomicrmw xor ptr @s128, i128 1 seq_cst, align 16
  %34 = atomicrmw nand ptr @sc, i8 1 seq_cst, align 1
  %35 = atomicrmw nand ptr @uc, i8 1 seq_cst, align 1
  %36 = atomicrmw nand ptr @ss, i16 1 seq_cst, align 2
  %37 = atomicrmw nand ptr @us, i16 1 seq_cst, align 2
  %38 = atomicrmw nand ptr @si, i32 1 seq_cst, align 4
  %39 = atomicrmw nand ptr @ui, i32 1 seq_cst, align 4
  %40 = atomicrmw nand ptr @sll, i64 1 seq_cst, align 8
  %41 = atomicrmw nand ptr @ull, i64 1 seq_cst, align 8
  %42 = atomicrmw and ptr @sc, i8 1 seq_cst, align 1
  %43 = atomicrmw and ptr @uc, i8 1 seq_cst, align 1
  %44 = atomicrmw and ptr @ss, i16 1 seq_cst, align 2
  %45 = atomicrmw and ptr @us, i16 1 seq_cst, align 2
  %46 = atomicrmw and ptr @si, i32 1 seq_cst, align 4
  %47 = atomicrmw and ptr @ui, i32 1 seq_cst, align 4
  %48 = atomicrmw and ptr @sll, i64 1 seq_cst, align 8
  %49 = atomicrmw and ptr @ull, i64 1 seq_cst, align 8
  ret void
}

define dso_local void @test_fetch_and_op() local_unnamed_addr #0 {
; CHECK-LABEL: test_fetch_and_op:
; CHECK:       # %bb.0: # %entry
; CHECK-NEXT:    addis 4, 2, sc@toc@ha
; CHECK-NEXT:    std 22, -80(1) # 8-byte Folded Spill
; CHECK-NEXT:    std 23, -72(1) # 8-byte Folded Spill
; CHECK-NEXT:    std 24, -64(1) # 8-byte Folded Spill
; CHECK-NEXT:    std 25, -56(1) # 8-byte Folded Spill
; CHECK-NEXT:    li 3, 11
; CHECK-NEXT:    addi 6, 4, sc@toc@l
; CHECK-NEXT:    std 26, -48(1) # 8-byte Folded Spill
; CHECK-NEXT:    std 27, -40(1) # 8-byte Folded Spill
; CHECK-NEXT:    std 28, -32(1) # 8-byte Folded Spill
; CHECK-NEXT:    std 29, -24(1) # 8-byte Folded Spill
; CHECK-NEXT:    std 30, -16(1) # 8-byte Folded Spill
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB1_1: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lbarx 5, 0, 6
; CHECK-NEXT:    addi 7, 5, 11
; CHECK-NEXT:    stbcx. 7, 0, 6
; CHECK-NEXT:    bne 0, .LBB1_1
; CHECK-NEXT:  # %bb.2: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    stb 5, sc@toc@l(4)
; CHECK-NEXT:    addis 5, 2, uc@toc@ha
; CHECK-NEXT:    addi 8, 5, uc@toc@l
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB1_3: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lbarx 7, 0, 8
; CHECK-NEXT:    addi 9, 7, 11
; CHECK-NEXT:    stbcx. 9, 0, 8
; CHECK-NEXT:    bne 0, .LBB1_3
; CHECK-NEXT:  # %bb.4: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    stb 7, uc@toc@l(5)
; CHECK-NEXT:    addis 7, 2, ss@toc@ha
; CHECK-NEXT:    addi 10, 7, ss@toc@l
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB1_5: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lharx 9, 0, 10
; CHECK-NEXT:    addi 11, 9, 11
; CHECK-NEXT:    sthcx. 11, 0, 10
; CHECK-NEXT:    bne 0, .LBB1_5
; CHECK-NEXT:  # %bb.6: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    sth 9, ss@toc@l(7)
; CHECK-NEXT:    addis 9, 2, us@toc@ha
; CHECK-NEXT:    addi 0, 9, us@toc@l
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB1_7: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lharx 11, 0, 0
; CHECK-NEXT:    addi 12, 11, 11
; CHECK-NEXT:    sthcx. 12, 0, 0
; CHECK-NEXT:    bne 0, .LBB1_7
; CHECK-NEXT:  # %bb.8: # %entry
; CHECK-NEXT:    addis 12, 2, si@toc@ha
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    sth 11, us@toc@l(9)
; CHECK-NEXT:    addi 29, 12, si@toc@l
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB1_9: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lwarx 11, 0, 29
; CHECK-NEXT:    addi 30, 11, 11
; CHECK-NEXT:    stwcx. 30, 0, 29
; CHECK-NEXT:    bne 0, .LBB1_9
; CHECK-NEXT:  # %bb.10: # %entry
; CHECK-NEXT:    addis 30, 2, ui@toc@ha
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    stw 11, si@toc@l(12)
; CHECK-NEXT:    addi 27, 30, ui@toc@l
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB1_11: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lwarx 11, 0, 27
; CHECK-NEXT:    addi 28, 11, 11
; CHECK-NEXT:    stwcx. 28, 0, 27
; CHECK-NEXT:    bne 0, .LBB1_11
; CHECK-NEXT:  # %bb.12: # %entry
; CHECK-NEXT:    addis 28, 2, sll@toc@ha
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    stw 11, ui@toc@l(30)
; CHECK-NEXT:    li 11, 11
; CHECK-NEXT:    addi 25, 28, sll@toc@l
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB1_13: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    ldarx 26, 0, 25
; CHECK-NEXT:    addi 24, 26, 11
; CHECK-NEXT:    stdcx. 24, 0, 25
; CHECK-NEXT:    bne 0, .LBB1_13
; CHECK-NEXT:  # %bb.14: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    std 26, sll@toc@l(28)
; CHECK-NEXT:    addis 26, 2, ull@toc@ha
; CHECK-NEXT:    addi 24, 26, ull@toc@l
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB1_15: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    ldarx 23, 0, 24
; CHECK-NEXT:    addi 22, 23, 11
; CHECK-NEXT:    stdcx. 22, 0, 24
; CHECK-NEXT:    bne 0, .LBB1_15
; CHECK-NEXT:  # %bb.16: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    std 23, ull@toc@l(26)
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB1_17: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lbarx 23, 0, 6
; CHECK-NEXT:    sub 22, 23, 3
; CHECK-NEXT:    stbcx. 22, 0, 6
; CHECK-NEXT:    bne 0, .LBB1_17
; CHECK-NEXT:  # %bb.18: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    stb 23, sc@toc@l(4)
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB1_19: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lbarx 23, 0, 8
; CHECK-NEXT:    sub 22, 23, 3
; CHECK-NEXT:    stbcx. 22, 0, 8
; CHECK-NEXT:    bne 0, .LBB1_19
; CHECK-NEXT:  # %bb.20: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    stb 23, uc@toc@l(5)
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB1_21: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lharx 23, 0, 10
; CHECK-NEXT:    sub 22, 23, 3
; CHECK-NEXT:    sthcx. 22, 0, 10
; CHECK-NEXT:    bne 0, .LBB1_21
; CHECK-NEXT:  # %bb.22: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    sth 23, ss@toc@l(7)
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB1_23: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lharx 23, 0, 0
; CHECK-NEXT:    sub 22, 23, 3
; CHECK-NEXT:    sthcx. 22, 0, 0
; CHECK-NEXT:    bne 0, .LBB1_23
; CHECK-NEXT:  # %bb.24: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    sth 23, us@toc@l(9)
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB1_25: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lwarx 23, 0, 29
; CHECK-NEXT:    sub 22, 23, 3
; CHECK-NEXT:    stwcx. 22, 0, 29
; CHECK-NEXT:    bne 0, .LBB1_25
; CHECK-NEXT:  # %bb.26: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    stw 23, si@toc@l(12)
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB1_27: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lwarx 23, 0, 27
; CHECK-NEXT:    sub 22, 23, 3
; CHECK-NEXT:    stwcx. 22, 0, 27
; CHECK-NEXT:    bne 0, .LBB1_27
; CHECK-NEXT:  # %bb.28: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    stw 23, ui@toc@l(30)
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB1_29: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    ldarx 23, 0, 25
; CHECK-NEXT:    sub 22, 23, 11
; CHECK-NEXT:    stdcx. 22, 0, 25
; CHECK-NEXT:    bne 0, .LBB1_29
; CHECK-NEXT:  # %bb.30: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    std 23, sll@toc@l(28)
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB1_31: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    ldarx 23, 0, 24
; CHECK-NEXT:    sub 22, 23, 11
; CHECK-NEXT:    stdcx. 22, 0, 24
; CHECK-NEXT:    bne 0, .LBB1_31
; CHECK-NEXT:  # %bb.32: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    std 23, ull@toc@l(26)
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB1_33: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lbarx 23, 0, 6
; CHECK-NEXT:    ori 22, 23, 11
; CHECK-NEXT:    stbcx. 22, 0, 6
; CHECK-NEXT:    bne 0, .LBB1_33
; CHECK-NEXT:  # %bb.34: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    stb 23, sc@toc@l(4)
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB1_35: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lbarx 23, 0, 8
; CHECK-NEXT:    ori 22, 23, 11
; CHECK-NEXT:    stbcx. 22, 0, 8
; CHECK-NEXT:    bne 0, .LBB1_35
; CHECK-NEXT:  # %bb.36: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    stb 23, uc@toc@l(5)
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB1_37: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lharx 23, 0, 10
; CHECK-NEXT:    ori 22, 23, 11
; CHECK-NEXT:    sthcx. 22, 0, 10
; CHECK-NEXT:    bne 0, .LBB1_37
; CHECK-NEXT:  # %bb.38: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    sth 23, ss@toc@l(7)
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB1_39: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lharx 23, 0, 0
; CHECK-NEXT:    ori 22, 23, 11
; CHECK-NEXT:    sthcx. 22, 0, 0
; CHECK-NEXT:    bne 0, .LBB1_39
; CHECK-NEXT:  # %bb.40: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    sth 23, us@toc@l(9)
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB1_41: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lwarx 23, 0, 29
; CHECK-NEXT:    ori 22, 23, 11
; CHECK-NEXT:    stwcx. 22, 0, 29
; CHECK-NEXT:    bne 0, .LBB1_41
; CHECK-NEXT:  # %bb.42: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    stw 23, si@toc@l(12)
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB1_43: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lwarx 23, 0, 27
; CHECK-NEXT:    ori 22, 23, 11
; CHECK-NEXT:    stwcx. 22, 0, 27
; CHECK-NEXT:    bne 0, .LBB1_43
; CHECK-NEXT:  # %bb.44: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    stw 23, ui@toc@l(30)
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB1_45: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    ldarx 23, 0, 25
; CHECK-NEXT:    ori 22, 23, 11
; CHECK-NEXT:    stdcx. 22, 0, 25
; CHECK-NEXT:    bne 0, .LBB1_45
; CHECK-NEXT:  # %bb.46: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    std 23, sll@toc@l(28)
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB1_47: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    ldarx 23, 0, 24
; CHECK-NEXT:    ori 22, 23, 11
; CHECK-NEXT:    stdcx. 22, 0, 24
; CHECK-NEXT:    bne 0, .LBB1_47
; CHECK-NEXT:  # %bb.48: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    std 23, ull@toc@l(26)
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB1_49: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lbarx 23, 0, 6
; CHECK-NEXT:    xori 22, 23, 11
; CHECK-NEXT:    stbcx. 22, 0, 6
; CHECK-NEXT:    bne 0, .LBB1_49
; CHECK-NEXT:  # %bb.50: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    stb 23, sc@toc@l(4)
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB1_51: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lbarx 23, 0, 8
; CHECK-NEXT:    xori 22, 23, 11
; CHECK-NEXT:    stbcx. 22, 0, 8
; CHECK-NEXT:    bne 0, .LBB1_51
; CHECK-NEXT:  # %bb.52: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    stb 23, uc@toc@l(5)
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB1_53: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lharx 23, 0, 10
; CHECK-NEXT:    xori 22, 23, 11
; CHECK-NEXT:    sthcx. 22, 0, 10
; CHECK-NEXT:    bne 0, .LBB1_53
; CHECK-NEXT:  # %bb.54: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    sth 23, ss@toc@l(7)
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB1_55: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lharx 23, 0, 0
; CHECK-NEXT:    xori 22, 23, 11
; CHECK-NEXT:    sthcx. 22, 0, 0
; CHECK-NEXT:    bne 0, .LBB1_55
; CHECK-NEXT:  # %bb.56: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    sth 23, us@toc@l(9)
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB1_57: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lwarx 23, 0, 29
; CHECK-NEXT:    xori 22, 23, 11
; CHECK-NEXT:    stwcx. 22, 0, 29
; CHECK-NEXT:    bne 0, .LBB1_57
; CHECK-NEXT:  # %bb.58: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    stw 23, si@toc@l(12)
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB1_59: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lwarx 23, 0, 27
; CHECK-NEXT:    xori 22, 23, 11
; CHECK-NEXT:    stwcx. 22, 0, 27
; CHECK-NEXT:    bne 0, .LBB1_59
; CHECK-NEXT:  # %bb.60: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    stw 23, ui@toc@l(30)
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB1_61: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    ldarx 23, 0, 25
; CHECK-NEXT:    xori 22, 23, 11
; CHECK-NEXT:    stdcx. 22, 0, 25
; CHECK-NEXT:    bne 0, .LBB1_61
; CHECK-NEXT:  # %bb.62: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    std 23, sll@toc@l(28)
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB1_63: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    ldarx 23, 0, 24
; CHECK-NEXT:    xori 22, 23, 11
; CHECK-NEXT:    stdcx. 22, 0, 24
; CHECK-NEXT:    bne 0, .LBB1_63
; CHECK-NEXT:  # %bb.64: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    std 23, ull@toc@l(26)
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB1_65: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lbarx 23, 0, 6
; CHECK-NEXT:    nand 22, 3, 23
; CHECK-NEXT:    stbcx. 22, 0, 6
; CHECK-NEXT:    bne 0, .LBB1_65
; CHECK-NEXT:  # %bb.66: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    stb 23, sc@toc@l(4)
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB1_67: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lbarx 23, 0, 8
; CHECK-NEXT:    nand 22, 3, 23
; CHECK-NEXT:    stbcx. 22, 0, 8
; CHECK-NEXT:    bne 0, .LBB1_67
; CHECK-NEXT:  # %bb.68: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    stb 23, uc@toc@l(5)
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB1_69: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lharx 23, 0, 10
; CHECK-NEXT:    nand 22, 3, 23
; CHECK-NEXT:    sthcx. 22, 0, 10
; CHECK-NEXT:    bne 0, .LBB1_69
; CHECK-NEXT:  # %bb.70: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    sth 23, ss@toc@l(7)
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB1_71: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lharx 23, 0, 0
; CHECK-NEXT:    nand 22, 3, 23
; CHECK-NEXT:    sthcx. 22, 0, 0
; CHECK-NEXT:    bne 0, .LBB1_71
; CHECK-NEXT:  # %bb.72: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    sth 23, us@toc@l(9)
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB1_73: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lwarx 23, 0, 29
; CHECK-NEXT:    nand 22, 3, 23
; CHECK-NEXT:    stwcx. 22, 0, 29
; CHECK-NEXT:    bne 0, .LBB1_73
; CHECK-NEXT:  # %bb.74: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    stw 23, si@toc@l(12)
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB1_75: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lwarx 23, 0, 27
; CHECK-NEXT:    nand 22, 3, 23
; CHECK-NEXT:    stwcx. 22, 0, 27
; CHECK-NEXT:    bne 0, .LBB1_75
; CHECK-NEXT:  # %bb.76: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    stw 23, ui@toc@l(30)
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB1_77: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    ldarx 23, 0, 25
; CHECK-NEXT:    nand 22, 11, 23
; CHECK-NEXT:    stdcx. 22, 0, 25
; CHECK-NEXT:    bne 0, .LBB1_77
; CHECK-NEXT:  # %bb.78: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    std 23, sll@toc@l(28)
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB1_79: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    ldarx 23, 0, 24
; CHECK-NEXT:    nand 22, 11, 23
; CHECK-NEXT:    stdcx. 22, 0, 24
; CHECK-NEXT:    bne 0, .LBB1_79
; CHECK-NEXT:  # %bb.80: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    std 23, ull@toc@l(26)
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB1_81: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lbarx 23, 0, 6
; CHECK-NEXT:    and 22, 3, 23
; CHECK-NEXT:    stbcx. 22, 0, 6
; CHECK-NEXT:    bne 0, .LBB1_81
; CHECK-NEXT:  # %bb.82: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    stb 23, sc@toc@l(4)
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB1_83: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lbarx 4, 0, 8
; CHECK-NEXT:    and 6, 3, 4
; CHECK-NEXT:    stbcx. 6, 0, 8
; CHECK-NEXT:    bne 0, .LBB1_83
; CHECK-NEXT:  # %bb.84: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    stb 4, uc@toc@l(5)
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB1_85: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lharx 4, 0, 10
; CHECK-NEXT:    and 5, 3, 4
; CHECK-NEXT:    sthcx. 5, 0, 10
; CHECK-NEXT:    bne 0, .LBB1_85
; CHECK-NEXT:  # %bb.86: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    sth 4, ss@toc@l(7)
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB1_87: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lharx 4, 0, 0
; CHECK-NEXT:    and 5, 3, 4
; CHECK-NEXT:    sthcx. 5, 0, 0
; CHECK-NEXT:    bne 0, .LBB1_87
; CHECK-NEXT:  # %bb.88: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    sth 4, us@toc@l(9)
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB1_89: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lwarx 4, 0, 29
; CHECK-NEXT:    and 5, 3, 4
; CHECK-NEXT:    stwcx. 5, 0, 29
; CHECK-NEXT:    bne 0, .LBB1_89
; CHECK-NEXT:  # %bb.90: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    stw 4, si@toc@l(12)
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB1_91: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lwarx 4, 0, 27
; CHECK-NEXT:    and 5, 3, 4
; CHECK-NEXT:    stwcx. 5, 0, 27
; CHECK-NEXT:    bne 0, .LBB1_91
; CHECK-NEXT:  # %bb.92: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    stw 4, ui@toc@l(30)
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB1_93: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    ldarx 3, 0, 25
; CHECK-NEXT:    and 4, 11, 3
; CHECK-NEXT:    stdcx. 4, 0, 25
; CHECK-NEXT:    bne 0, .LBB1_93
; CHECK-NEXT:  # %bb.94: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    std 3, sll@toc@l(28)
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB1_95: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    ldarx 3, 0, 24
; CHECK-NEXT:    and 4, 11, 3
; CHECK-NEXT:    stdcx. 4, 0, 24
; CHECK-NEXT:    bne 0, .LBB1_95
; CHECK-NEXT:  # %bb.96: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    std 3, ull@toc@l(26)
; CHECK-NEXT:    ld 30, -16(1) # 8-byte Folded Reload
; CHECK-NEXT:    ld 29, -24(1) # 8-byte Folded Reload
; CHECK-NEXT:    ld 28, -32(1) # 8-byte Folded Reload
; CHECK-NEXT:    ld 27, -40(1) # 8-byte Folded Reload
; CHECK-NEXT:    ld 26, -48(1) # 8-byte Folded Reload
; CHECK-NEXT:    ld 25, -56(1) # 8-byte Folded Reload
; CHECK-NEXT:    ld 24, -64(1) # 8-byte Folded Reload
; CHECK-NEXT:    ld 23, -72(1) # 8-byte Folded Reload
; CHECK-NEXT:    ld 22, -80(1) # 8-byte Folded Reload
; CHECK-NEXT:    blr
;
; AIX32-LABEL: test_fetch_and_op:
; AIX32:       # %bb.0: # %entry
; AIX32-NEXT:    mflr 0
; AIX32-NEXT:    stwu 1, -144(1)
; AIX32-NEXT:    lwz 4, L..C0(2) # @sc
; AIX32-NEXT:    stw 0, 152(1)
; AIX32-NEXT:    stw 26, 120(1) # 4-byte Folded Spill
; AIX32-NEXT:    li 7, 11
; AIX32-NEXT:    stw 13, 68(1) # 4-byte Folded Spill
; AIX32-NEXT:    stw 14, 72(1) # 4-byte Folded Spill
; AIX32-NEXT:    stw 15, 76(1) # 4-byte Folded Spill
; AIX32-NEXT:    rlwinm 3, 4, 3, 27, 28
; AIX32-NEXT:    stw 16, 80(1) # 4-byte Folded Spill
; AIX32-NEXT:    xori 26, 3, 24
; AIX32-NEXT:    li 3, 255
; AIX32-NEXT:    stw 17, 84(1) # 4-byte Folded Spill
; AIX32-NEXT:    stw 18, 88(1) # 4-byte Folded Spill
; AIX32-NEXT:    stw 19, 92(1) # 4-byte Folded Spill
; AIX32-NEXT:    stw 20, 96(1) # 4-byte Folded Spill
; AIX32-NEXT:    stw 21, 100(1) # 4-byte Folded Spill
; AIX32-NEXT:    stw 22, 104(1) # 4-byte Folded Spill
; AIX32-NEXT:    stw 23, 108(1) # 4-byte Folded Spill
; AIX32-NEXT:    stw 24, 112(1) # 4-byte Folded Spill
; AIX32-NEXT:    stw 25, 116(1) # 4-byte Folded Spill
; AIX32-NEXT:    stw 27, 124(1) # 4-byte Folded Spill
; AIX32-NEXT:    stw 28, 128(1) # 4-byte Folded Spill
; AIX32-NEXT:    stw 29, 132(1) # 4-byte Folded Spill
; AIX32-NEXT:    stw 30, 136(1) # 4-byte Folded Spill
; AIX32-NEXT:    stw 31, 140(1) # 4-byte Folded Spill
; AIX32-NEXT:    stw 4, 64(1) # 4-byte Folded Spill
; AIX32-NEXT:    rlwinm 24, 4, 0, 0, 29
; AIX32-NEXT:    slw 23, 7, 26
; AIX32-NEXT:    slw 4, 3, 26
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB1_1: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 3, 0, 24
; AIX32-NEXT:    add 5, 23, 3
; AIX32-NEXT:    andc 6, 3, 4
; AIX32-NEXT:    and 5, 5, 4
; AIX32-NEXT:    or 5, 5, 6
; AIX32-NEXT:    stwcx. 5, 0, 24
; AIX32-NEXT:    bne 0, L..BB1_1
; AIX32-NEXT:  # %bb.2: # %entry
; AIX32-NEXT:    lwz 27, L..C1(2) # @uc
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    srw 3, 3, 26
; AIX32-NEXT:    lwz 4, 64(1) # 4-byte Folded Reload
; AIX32-NEXT:    clrlwi 3, 3, 24
; AIX32-NEXT:    stb 3, 0(4)
; AIX32-NEXT:    rlwinm 3, 27, 3, 27, 28
; AIX32-NEXT:    xori 22, 3, 24
; AIX32-NEXT:    li 3, 255
; AIX32-NEXT:    sync
; AIX32-NEXT:    rlwinm 21, 27, 0, 0, 29
; AIX32-NEXT:    slw 19, 7, 22
; AIX32-NEXT:    slw 3, 3, 22
; AIX32-NEXT:  L..BB1_3: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 4, 0, 21
; AIX32-NEXT:    add 5, 19, 4
; AIX32-NEXT:    andc 6, 4, 3
; AIX32-NEXT:    and 5, 5, 3
; AIX32-NEXT:    or 5, 5, 6
; AIX32-NEXT:    stwcx. 5, 0, 21
; AIX32-NEXT:    bne 0, L..BB1_3
; AIX32-NEXT:  # %bb.4: # %entry
; AIX32-NEXT:    lwz 25, L..C2(2) # @ss
; AIX32-NEXT:    srw 3, 4, 22
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    li 4, 0
; AIX32-NEXT:    clrlwi 3, 3, 24
; AIX32-NEXT:    stb 3, 0(27)
; AIX32-NEXT:    rlwinm 3, 25, 3, 27, 27
; AIX32-NEXT:    rlwinm 17, 25, 0, 0, 29
; AIX32-NEXT:    sync
; AIX32-NEXT:    xori 18, 3, 16
; AIX32-NEXT:    ori 3, 4, 65535
; AIX32-NEXT:    slw 16, 7, 18
; AIX32-NEXT:    slw 3, 3, 18
; AIX32-NEXT:  L..BB1_5: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 4, 0, 17
; AIX32-NEXT:    add 5, 16, 4
; AIX32-NEXT:    andc 6, 4, 3
; AIX32-NEXT:    and 5, 5, 3
; AIX32-NEXT:    or 5, 5, 6
; AIX32-NEXT:    stwcx. 5, 0, 17
; AIX32-NEXT:    bne 0, L..BB1_5
; AIX32-NEXT:  # %bb.6: # %entry
; AIX32-NEXT:    lwz 20, L..C3(2) # @us
; AIX32-NEXT:    srw 3, 4, 18
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    li 4, 0
; AIX32-NEXT:    clrlwi 3, 3, 16
; AIX32-NEXT:    sth 3, 0(25)
; AIX32-NEXT:    rlwinm 3, 20, 3, 27, 27
; AIX32-NEXT:    rlwinm 13, 20, 0, 0, 29
; AIX32-NEXT:    sync
; AIX32-NEXT:    xori 15, 3, 16
; AIX32-NEXT:    ori 3, 4, 65535
; AIX32-NEXT:    slw 29, 7, 15
; AIX32-NEXT:    slw 3, 3, 15
; AIX32-NEXT:  L..BB1_7: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 4, 0, 13
; AIX32-NEXT:    add 5, 29, 4
; AIX32-NEXT:    andc 6, 4, 3
; AIX32-NEXT:    and 5, 5, 3
; AIX32-NEXT:    or 5, 5, 6
; AIX32-NEXT:    stwcx. 5, 0, 13
; AIX32-NEXT:    bne 0, L..BB1_7
; AIX32-NEXT:  # %bb.8: # %entry
; AIX32-NEXT:    srw 3, 4, 15
; AIX32-NEXT:    lwz 28, L..C4(2) # @si
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    clrlwi 3, 3, 16
; AIX32-NEXT:    sth 3, 0(20)
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB1_9: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 3, 0, 28
; AIX32-NEXT:    addi 4, 3, 11
; AIX32-NEXT:    stwcx. 4, 0, 28
; AIX32-NEXT:    bne 0, L..BB1_9
; AIX32-NEXT:  # %bb.10: # %entry
; AIX32-NEXT:    lwz 14, L..C5(2) # @ui
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    stw 3, 0(28)
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB1_11: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 3, 0, 14
; AIX32-NEXT:    addi 4, 3, 11
; AIX32-NEXT:    stwcx. 4, 0, 14
; AIX32-NEXT:    bne 0, L..BB1_11
; AIX32-NEXT:  # %bb.12: # %entry
; AIX32-NEXT:    lwz 31, L..C6(2) # @sll
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    stw 3, 0(14)
; AIX32-NEXT:    li 4, 0
; AIX32-NEXT:    li 5, 11
; AIX32-NEXT:    li 6, 5
; AIX32-NEXT:    mr 3, 31
; AIX32-NEXT:    bl .__atomic_fetch_add_8[PR]
; AIX32-NEXT:    nop
; AIX32-NEXT:    lwz 30, L..C7(2) # @ull
; AIX32-NEXT:    mr 7, 3
; AIX32-NEXT:    mr 8, 4
; AIX32-NEXT:    li 4, 0
; AIX32-NEXT:    li 5, 11
; AIX32-NEXT:    li 6, 5
; AIX32-NEXT:    stw 8, 4(31)
; AIX32-NEXT:    stw 7, 0(31)
; AIX32-NEXT:    mr 3, 30
; AIX32-NEXT:    bl .__atomic_fetch_add_8[PR]
; AIX32-NEXT:    nop
; AIX32-NEXT:    li 5, 255
; AIX32-NEXT:    stw 4, 4(30)
; AIX32-NEXT:    stw 3, 0(30)
; AIX32-NEXT:    slw 3, 5, 26
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB1_13: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 4, 0, 24
; AIX32-NEXT:    sub 5, 4, 23
; AIX32-NEXT:    andc 6, 4, 3
; AIX32-NEXT:    and 5, 5, 3
; AIX32-NEXT:    or 5, 5, 6
; AIX32-NEXT:    stwcx. 5, 0, 24
; AIX32-NEXT:    bne 0, L..BB1_13
; AIX32-NEXT:  # %bb.14: # %entry
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    srw 3, 4, 26
; AIX32-NEXT:    lwz 4, 64(1) # 4-byte Folded Reload
; AIX32-NEXT:    clrlwi 3, 3, 24
; AIX32-NEXT:    stb 3, 0(4)
; AIX32-NEXT:    li 3, 255
; AIX32-NEXT:    slw 3, 3, 22
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB1_15: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 4, 0, 21
; AIX32-NEXT:    sub 5, 4, 19
; AIX32-NEXT:    andc 6, 4, 3
; AIX32-NEXT:    and 5, 5, 3
; AIX32-NEXT:    or 5, 5, 6
; AIX32-NEXT:    stwcx. 5, 0, 21
; AIX32-NEXT:    bne 0, L..BB1_15
; AIX32-NEXT:  # %bb.16: # %entry
; AIX32-NEXT:    srw 3, 4, 22
; AIX32-NEXT:    li 4, 0
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    li 8, 11
; AIX32-NEXT:    clrlwi 3, 3, 24
; AIX32-NEXT:    stb 3, 0(27)
; AIX32-NEXT:    ori 3, 4, 65535
; AIX32-NEXT:    slw 3, 3, 18
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB1_17: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 4, 0, 17
; AIX32-NEXT:    sub 5, 4, 16
; AIX32-NEXT:    andc 6, 4, 3
; AIX32-NEXT:    and 5, 5, 3
; AIX32-NEXT:    or 5, 5, 6
; AIX32-NEXT:    stwcx. 5, 0, 17
; AIX32-NEXT:    bne 0, L..BB1_17
; AIX32-NEXT:  # %bb.18: # %entry
; AIX32-NEXT:    srw 3, 4, 18
; AIX32-NEXT:    li 4, 0
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    clrlwi 3, 3, 16
; AIX32-NEXT:    sth 3, 0(25)
; AIX32-NEXT:    ori 3, 4, 65535
; AIX32-NEXT:    slw 3, 3, 15
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB1_19: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 4, 0, 13
; AIX32-NEXT:    sub 5, 4, 29
; AIX32-NEXT:    andc 6, 4, 3
; AIX32-NEXT:    and 5, 5, 3
; AIX32-NEXT:    or 5, 5, 6
; AIX32-NEXT:    stwcx. 5, 0, 13
; AIX32-NEXT:    bne 0, L..BB1_19
; AIX32-NEXT:  # %bb.20: # %entry
; AIX32-NEXT:    srw 3, 4, 15
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    clrlwi 3, 3, 16
; AIX32-NEXT:    sth 3, 0(20)
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB1_21: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 3, 0, 28
; AIX32-NEXT:    sub 4, 3, 8
; AIX32-NEXT:    stwcx. 4, 0, 28
; AIX32-NEXT:    bne 0, L..BB1_21
; AIX32-NEXT:  # %bb.22: # %entry
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    stw 3, 0(28)
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB1_23: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 7, 0, 14
; AIX32-NEXT:    sub 3, 7, 8
; AIX32-NEXT:    stwcx. 3, 0, 14
; AIX32-NEXT:    bne 0, L..BB1_23
; AIX32-NEXT:  # %bb.24: # %entry
; AIX32-NEXT:    mr 3, 31
; AIX32-NEXT:    li 4, 0
; AIX32-NEXT:    li 5, 11
; AIX32-NEXT:    li 6, 5
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    stw 7, 0(14)
; AIX32-NEXT:    bl .__atomic_fetch_sub_8[PR]
; AIX32-NEXT:    nop
; AIX32-NEXT:    mr 7, 3
; AIX32-NEXT:    mr 8, 4
; AIX32-NEXT:    mr 3, 30
; AIX32-NEXT:    li 4, 0
; AIX32-NEXT:    li 5, 11
; AIX32-NEXT:    li 6, 5
; AIX32-NEXT:    stw 8, 4(31)
; AIX32-NEXT:    stw 7, 0(31)
; AIX32-NEXT:    bl .__atomic_fetch_sub_8[PR]
; AIX32-NEXT:    nop
; AIX32-NEXT:    li 5, 255
; AIX32-NEXT:    stw 4, 4(30)
; AIX32-NEXT:    stw 3, 0(30)
; AIX32-NEXT:    slw 3, 5, 26
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB1_25: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 4, 0, 24
; AIX32-NEXT:    or 5, 23, 4
; AIX32-NEXT:    andc 6, 4, 3
; AIX32-NEXT:    and 5, 5, 3
; AIX32-NEXT:    or 5, 5, 6
; AIX32-NEXT:    stwcx. 5, 0, 24
; AIX32-NEXT:    bne 0, L..BB1_25
; AIX32-NEXT:  # %bb.26: # %entry
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    srw 3, 4, 26
; AIX32-NEXT:    lwz 4, 64(1) # 4-byte Folded Reload
; AIX32-NEXT:    clrlwi 3, 3, 24
; AIX32-NEXT:    stb 3, 0(4)
; AIX32-NEXT:    li 3, 255
; AIX32-NEXT:    slw 3, 3, 22
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB1_27: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 4, 0, 21
; AIX32-NEXT:    or 5, 19, 4
; AIX32-NEXT:    andc 6, 4, 3
; AIX32-NEXT:    and 5, 5, 3
; AIX32-NEXT:    or 5, 5, 6
; AIX32-NEXT:    stwcx. 5, 0, 21
; AIX32-NEXT:    bne 0, L..BB1_27
; AIX32-NEXT:  # %bb.28: # %entry
; AIX32-NEXT:    srw 3, 4, 22
; AIX32-NEXT:    li 4, 0
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    clrlwi 3, 3, 24
; AIX32-NEXT:    stb 3, 0(27)
; AIX32-NEXT:    ori 3, 4, 65535
; AIX32-NEXT:    slw 3, 3, 18
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB1_29: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 4, 0, 17
; AIX32-NEXT:    or 5, 16, 4
; AIX32-NEXT:    andc 6, 4, 3
; AIX32-NEXT:    and 5, 5, 3
; AIX32-NEXT:    or 5, 5, 6
; AIX32-NEXT:    stwcx. 5, 0, 17
; AIX32-NEXT:    bne 0, L..BB1_29
; AIX32-NEXT:  # %bb.30: # %entry
; AIX32-NEXT:    srw 3, 4, 18
; AIX32-NEXT:    li 4, 0
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    clrlwi 3, 3, 16
; AIX32-NEXT:    sth 3, 0(25)
; AIX32-NEXT:    ori 3, 4, 65535
; AIX32-NEXT:    slw 3, 3, 15
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB1_31: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 4, 0, 13
; AIX32-NEXT:    or 5, 29, 4
; AIX32-NEXT:    andc 6, 4, 3
; AIX32-NEXT:    and 5, 5, 3
; AIX32-NEXT:    or 5, 5, 6
; AIX32-NEXT:    stwcx. 5, 0, 13
; AIX32-NEXT:    bne 0, L..BB1_31
; AIX32-NEXT:  # %bb.32: # %entry
; AIX32-NEXT:    srw 3, 4, 15
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    clrlwi 3, 3, 16
; AIX32-NEXT:    sth 3, 0(20)
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB1_33: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 3, 0, 28
; AIX32-NEXT:    ori 4, 3, 11
; AIX32-NEXT:    stwcx. 4, 0, 28
; AIX32-NEXT:    bne 0, L..BB1_33
; AIX32-NEXT:  # %bb.34: # %entry
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    stw 3, 0(28)
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB1_35: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 7, 0, 14
; AIX32-NEXT:    ori 3, 7, 11
; AIX32-NEXT:    stwcx. 3, 0, 14
; AIX32-NEXT:    bne 0, L..BB1_35
; AIX32-NEXT:  # %bb.36: # %entry
; AIX32-NEXT:    mr 3, 31
; AIX32-NEXT:    li 4, 0
; AIX32-NEXT:    li 5, 11
; AIX32-NEXT:    li 6, 5
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    stw 7, 0(14)
; AIX32-NEXT:    bl .__atomic_fetch_or_8[PR]
; AIX32-NEXT:    nop
; AIX32-NEXT:    mr 7, 3
; AIX32-NEXT:    mr 8, 4
; AIX32-NEXT:    mr 3, 30
; AIX32-NEXT:    li 4, 0
; AIX32-NEXT:    li 5, 11
; AIX32-NEXT:    li 6, 5
; AIX32-NEXT:    stw 8, 4(31)
; AIX32-NEXT:    stw 7, 0(31)
; AIX32-NEXT:    bl .__atomic_fetch_or_8[PR]
; AIX32-NEXT:    nop
; AIX32-NEXT:    li 5, 255
; AIX32-NEXT:    stw 4, 4(30)
; AIX32-NEXT:    stw 3, 0(30)
; AIX32-NEXT:    slw 3, 5, 26
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB1_37: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 4, 0, 24
; AIX32-NEXT:    xor 5, 23, 4
; AIX32-NEXT:    andc 6, 4, 3
; AIX32-NEXT:    and 5, 5, 3
; AIX32-NEXT:    or 5, 5, 6
; AIX32-NEXT:    stwcx. 5, 0, 24
; AIX32-NEXT:    bne 0, L..BB1_37
; AIX32-NEXT:  # %bb.38: # %entry
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    srw 3, 4, 26
; AIX32-NEXT:    lwz 4, 64(1) # 4-byte Folded Reload
; AIX32-NEXT:    clrlwi 3, 3, 24
; AIX32-NEXT:    stb 3, 0(4)
; AIX32-NEXT:    li 3, 255
; AIX32-NEXT:    slw 3, 3, 22
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB1_39: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 4, 0, 21
; AIX32-NEXT:    xor 5, 19, 4
; AIX32-NEXT:    andc 6, 4, 3
; AIX32-NEXT:    and 5, 5, 3
; AIX32-NEXT:    or 5, 5, 6
; AIX32-NEXT:    stwcx. 5, 0, 21
; AIX32-NEXT:    bne 0, L..BB1_39
; AIX32-NEXT:  # %bb.40: # %entry
; AIX32-NEXT:    srw 3, 4, 22
; AIX32-NEXT:    li 4, 0
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    clrlwi 3, 3, 24
; AIX32-NEXT:    stb 3, 0(27)
; AIX32-NEXT:    ori 3, 4, 65535
; AIX32-NEXT:    slw 3, 3, 18
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB1_41: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 4, 0, 17
; AIX32-NEXT:    xor 5, 16, 4
; AIX32-NEXT:    andc 6, 4, 3
; AIX32-NEXT:    and 5, 5, 3
; AIX32-NEXT:    or 5, 5, 6
; AIX32-NEXT:    stwcx. 5, 0, 17
; AIX32-NEXT:    bne 0, L..BB1_41
; AIX32-NEXT:  # %bb.42: # %entry
; AIX32-NEXT:    srw 3, 4, 18
; AIX32-NEXT:    li 4, 0
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    clrlwi 3, 3, 16
; AIX32-NEXT:    sth 3, 0(25)
; AIX32-NEXT:    ori 3, 4, 65535
; AIX32-NEXT:    slw 3, 3, 15
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB1_43: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 4, 0, 13
; AIX32-NEXT:    xor 5, 29, 4
; AIX32-NEXT:    andc 6, 4, 3
; AIX32-NEXT:    and 5, 5, 3
; AIX32-NEXT:    or 5, 5, 6
; AIX32-NEXT:    stwcx. 5, 0, 13
; AIX32-NEXT:    bne 0, L..BB1_43
; AIX32-NEXT:  # %bb.44: # %entry
; AIX32-NEXT:    srw 3, 4, 15
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    clrlwi 3, 3, 16
; AIX32-NEXT:    sth 3, 0(20)
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB1_45: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 3, 0, 28
; AIX32-NEXT:    xori 4, 3, 11
; AIX32-NEXT:    stwcx. 4, 0, 28
; AIX32-NEXT:    bne 0, L..BB1_45
; AIX32-NEXT:  # %bb.46: # %entry
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    stw 3, 0(28)
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB1_47: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 7, 0, 14
; AIX32-NEXT:    xori 3, 7, 11
; AIX32-NEXT:    stwcx. 3, 0, 14
; AIX32-NEXT:    bne 0, L..BB1_47
; AIX32-NEXT:  # %bb.48: # %entry
; AIX32-NEXT:    mr 3, 31
; AIX32-NEXT:    li 4, 0
; AIX32-NEXT:    li 5, 11
; AIX32-NEXT:    li 6, 5
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    stw 7, 0(14)
; AIX32-NEXT:    bl .__atomic_fetch_xor_8[PR]
; AIX32-NEXT:    nop
; AIX32-NEXT:    mr 7, 3
; AIX32-NEXT:    mr 8, 4
; AIX32-NEXT:    mr 3, 30
; AIX32-NEXT:    li 4, 0
; AIX32-NEXT:    li 5, 11
; AIX32-NEXT:    li 6, 5
; AIX32-NEXT:    stw 8, 4(31)
; AIX32-NEXT:    stw 7, 0(31)
; AIX32-NEXT:    bl .__atomic_fetch_xor_8[PR]
; AIX32-NEXT:    nop
; AIX32-NEXT:    li 5, 255
; AIX32-NEXT:    stw 4, 4(30)
; AIX32-NEXT:    stw 3, 0(30)
; AIX32-NEXT:    slw 3, 5, 26
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB1_49: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 4, 0, 24
; AIX32-NEXT:    nand 5, 23, 4
; AIX32-NEXT:    andc 6, 4, 3
; AIX32-NEXT:    and 5, 5, 3
; AIX32-NEXT:    or 5, 5, 6
; AIX32-NEXT:    stwcx. 5, 0, 24
; AIX32-NEXT:    bne 0, L..BB1_49
; AIX32-NEXT:  # %bb.50: # %entry
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    srw 3, 4, 26
; AIX32-NEXT:    li 8, 11
; AIX32-NEXT:    lwz 4, 64(1) # 4-byte Folded Reload
; AIX32-NEXT:    clrlwi 3, 3, 24
; AIX32-NEXT:    stb 3, 0(4)
; AIX32-NEXT:    li 3, 255
; AIX32-NEXT:    slw 3, 3, 22
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB1_51: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 4, 0, 21
; AIX32-NEXT:    nand 5, 19, 4
; AIX32-NEXT:    andc 6, 4, 3
; AIX32-NEXT:    and 5, 5, 3
; AIX32-NEXT:    or 5, 5, 6
; AIX32-NEXT:    stwcx. 5, 0, 21
; AIX32-NEXT:    bne 0, L..BB1_51
; AIX32-NEXT:  # %bb.52: # %entry
; AIX32-NEXT:    srw 3, 4, 22
; AIX32-NEXT:    li 4, 0
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    clrlwi 3, 3, 24
; AIX32-NEXT:    stb 3, 0(27)
; AIX32-NEXT:    ori 3, 4, 65535
; AIX32-NEXT:    slw 3, 3, 18
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB1_53: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 4, 0, 17
; AIX32-NEXT:    nand 5, 16, 4
; AIX32-NEXT:    andc 6, 4, 3
; AIX32-NEXT:    and 5, 5, 3
; AIX32-NEXT:    or 5, 5, 6
; AIX32-NEXT:    stwcx. 5, 0, 17
; AIX32-NEXT:    bne 0, L..BB1_53
; AIX32-NEXT:  # %bb.54: # %entry
; AIX32-NEXT:    srw 3, 4, 18
; AIX32-NEXT:    li 4, 0
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    clrlwi 3, 3, 16
; AIX32-NEXT:    sth 3, 0(25)
; AIX32-NEXT:    ori 3, 4, 65535
; AIX32-NEXT:    slw 3, 3, 15
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB1_55: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 4, 0, 13
; AIX32-NEXT:    nand 5, 29, 4
; AIX32-NEXT:    andc 6, 4, 3
; AIX32-NEXT:    and 5, 5, 3
; AIX32-NEXT:    or 5, 5, 6
; AIX32-NEXT:    stwcx. 5, 0, 13
; AIX32-NEXT:    bne 0, L..BB1_55
; AIX32-NEXT:  # %bb.56: # %entry
; AIX32-NEXT:    srw 3, 4, 15
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    clrlwi 3, 3, 16
; AIX32-NEXT:    sth 3, 0(20)
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB1_57: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 3, 0, 28
; AIX32-NEXT:    nand 4, 8, 3
; AIX32-NEXT:    stwcx. 4, 0, 28
; AIX32-NEXT:    bne 0, L..BB1_57
; AIX32-NEXT:  # %bb.58: # %entry
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    stw 3, 0(28)
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB1_59: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 7, 0, 14
; AIX32-NEXT:    nand 3, 8, 7
; AIX32-NEXT:    stwcx. 3, 0, 14
; AIX32-NEXT:    bne 0, L..BB1_59
; AIX32-NEXT:  # %bb.60: # %entry
; AIX32-NEXT:    mr 3, 31
; AIX32-NEXT:    li 4, 0
; AIX32-NEXT:    li 5, 11
; AIX32-NEXT:    li 6, 5
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    stw 7, 0(14)
; AIX32-NEXT:    bl .__atomic_fetch_nand_8[PR]
; AIX32-NEXT:    nop
; AIX32-NEXT:    mr 7, 3
; AIX32-NEXT:    mr 8, 4
; AIX32-NEXT:    mr 3, 30
; AIX32-NEXT:    li 4, 0
; AIX32-NEXT:    li 5, 11
; AIX32-NEXT:    li 6, 5
; AIX32-NEXT:    stw 8, 4(31)
; AIX32-NEXT:    stw 7, 0(31)
; AIX32-NEXT:    bl .__atomic_fetch_nand_8[PR]
; AIX32-NEXT:    nop
; AIX32-NEXT:    li 5, 255
; AIX32-NEXT:    stw 4, 4(30)
; AIX32-NEXT:    stw 3, 0(30)
; AIX32-NEXT:    slw 3, 5, 26
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB1_61: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 4, 0, 24
; AIX32-NEXT:    and 5, 23, 4
; AIX32-NEXT:    andc 6, 4, 3
; AIX32-NEXT:    and 5, 5, 3
; AIX32-NEXT:    or 5, 5, 6
; AIX32-NEXT:    stwcx. 5, 0, 24
; AIX32-NEXT:    bne 0, L..BB1_61
; AIX32-NEXT:  # %bb.62: # %entry
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    srw 3, 4, 26
; AIX32-NEXT:    lwz 4, 64(1) # 4-byte Folded Reload
; AIX32-NEXT:    clrlwi 3, 3, 24
; AIX32-NEXT:    stb 3, 0(4)
; AIX32-NEXT:    li 3, 255
; AIX32-NEXT:    slw 3, 3, 22
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB1_63: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 4, 0, 21
; AIX32-NEXT:    and 5, 19, 4
; AIX32-NEXT:    andc 6, 4, 3
; AIX32-NEXT:    and 5, 5, 3
; AIX32-NEXT:    or 5, 5, 6
; AIX32-NEXT:    stwcx. 5, 0, 21
; AIX32-NEXT:    bne 0, L..BB1_63
; AIX32-NEXT:  # %bb.64: # %entry
; AIX32-NEXT:    srw 3, 4, 22
; AIX32-NEXT:    li 4, 0
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    li 8, 11
; AIX32-NEXT:    clrlwi 3, 3, 24
; AIX32-NEXT:    stb 3, 0(27)
; AIX32-NEXT:    ori 3, 4, 65535
; AIX32-NEXT:    slw 3, 3, 18
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB1_65: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 4, 0, 17
; AIX32-NEXT:    and 5, 16, 4
; AIX32-NEXT:    andc 6, 4, 3
; AIX32-NEXT:    and 5, 5, 3
; AIX32-NEXT:    or 5, 5, 6
; AIX32-NEXT:    stwcx. 5, 0, 17
; AIX32-NEXT:    bne 0, L..BB1_65
; AIX32-NEXT:  # %bb.66: # %entry
; AIX32-NEXT:    srw 3, 4, 18
; AIX32-NEXT:    li 4, 0
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    clrlwi 3, 3, 16
; AIX32-NEXT:    sth 3, 0(25)
; AIX32-NEXT:    ori 3, 4, 65535
; AIX32-NEXT:    slw 3, 3, 15
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB1_67: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 4, 0, 13
; AIX32-NEXT:    and 5, 29, 4
; AIX32-NEXT:    andc 6, 4, 3
; AIX32-NEXT:    and 5, 5, 3
; AIX32-NEXT:    or 5, 5, 6
; AIX32-NEXT:    stwcx. 5, 0, 13
; AIX32-NEXT:    bne 0, L..BB1_67
; AIX32-NEXT:  # %bb.68: # %entry
; AIX32-NEXT:    srw 3, 4, 15
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    clrlwi 3, 3, 16
; AIX32-NEXT:    sth 3, 0(20)
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB1_69: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 3, 0, 28
; AIX32-NEXT:    and 4, 8, 3
; AIX32-NEXT:    stwcx. 4, 0, 28
; AIX32-NEXT:    bne 0, L..BB1_69
; AIX32-NEXT:  # %bb.70: # %entry
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    stw 3, 0(28)
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB1_71: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 7, 0, 14
; AIX32-NEXT:    and 3, 8, 7
; AIX32-NEXT:    stwcx. 3, 0, 14
; AIX32-NEXT:    bne 0, L..BB1_71
; AIX32-NEXT:  # %bb.72: # %entry
; AIX32-NEXT:    mr 3, 31
; AIX32-NEXT:    li 4, 0
; AIX32-NEXT:    li 5, 11
; AIX32-NEXT:    li 6, 5
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    stw 7, 0(14)
; AIX32-NEXT:    bl .__atomic_fetch_and_8[PR]
; AIX32-NEXT:    nop
; AIX32-NEXT:    mr 7, 3
; AIX32-NEXT:    mr 8, 4
; AIX32-NEXT:    mr 3, 30
; AIX32-NEXT:    li 4, 0
; AIX32-NEXT:    li 5, 11
; AIX32-NEXT:    li 6, 5
; AIX32-NEXT:    stw 8, 4(31)
; AIX32-NEXT:    stw 7, 0(31)
; AIX32-NEXT:    bl .__atomic_fetch_and_8[PR]
; AIX32-NEXT:    nop
; AIX32-NEXT:    stw 4, 4(30)
; AIX32-NEXT:    stw 3, 0(30)
; AIX32-NEXT:    lwz 31, 140(1) # 4-byte Folded Reload
; AIX32-NEXT:    lwz 30, 136(1) # 4-byte Folded Reload
; AIX32-NEXT:    lwz 29, 132(1) # 4-byte Folded Reload
; AIX32-NEXT:    lwz 28, 128(1) # 4-byte Folded Reload
; AIX32-NEXT:    lwz 27, 124(1) # 4-byte Folded Reload
; AIX32-NEXT:    lwz 26, 120(1) # 4-byte Folded Reload
; AIX32-NEXT:    lwz 25, 116(1) # 4-byte Folded Reload
; AIX32-NEXT:    lwz 24, 112(1) # 4-byte Folded Reload
; AIX32-NEXT:    lwz 23, 108(1) # 4-byte Folded Reload
; AIX32-NEXT:    lwz 22, 104(1) # 4-byte Folded Reload
; AIX32-NEXT:    lwz 21, 100(1) # 4-byte Folded Reload
; AIX32-NEXT:    lwz 20, 96(1) # 4-byte Folded Reload
; AIX32-NEXT:    lwz 19, 92(1) # 4-byte Folded Reload
; AIX32-NEXT:    lwz 18, 88(1) # 4-byte Folded Reload
; AIX32-NEXT:    lwz 17, 84(1) # 4-byte Folded Reload
; AIX32-NEXT:    lwz 16, 80(1) # 4-byte Folded Reload
; AIX32-NEXT:    lwz 15, 76(1) # 4-byte Folded Reload
; AIX32-NEXT:    lwz 14, 72(1) # 4-byte Folded Reload
; AIX32-NEXT:    lwz 13, 68(1) # 4-byte Folded Reload
; AIX32-NEXT:    addi 1, 1, 144
; AIX32-NEXT:    lwz 0, 8(1)
; AIX32-NEXT:    mtlr 0
; AIX32-NEXT:    blr
entry:
  %0 = atomicrmw add ptr @sc, i8 11 seq_cst, align 1
  store i8 %0, ptr @sc, align 1
  %1 = atomicrmw add ptr @uc, i8 11 seq_cst, align 1
  store i8 %1, ptr @uc, align 1
  %2 = atomicrmw add ptr @ss, i16 11 seq_cst, align 2
  store i16 %2, ptr @ss, align 2
  %3 = atomicrmw add ptr @us, i16 11 seq_cst, align 2
  store i16 %3, ptr @us, align 2
  %4 = atomicrmw add ptr @si, i32 11 seq_cst, align 4
  store i32 %4, ptr @si, align 4
  %5 = atomicrmw add ptr @ui, i32 11 seq_cst, align 4
  store i32 %5, ptr @ui, align 4
  %6 = atomicrmw add ptr @sll, i64 11 seq_cst, align 8
  store i64 %6, ptr @sll, align 8
  %7 = atomicrmw add ptr @ull, i64 11 seq_cst, align 8
  store i64 %7, ptr @ull, align 8
  %8 = atomicrmw sub ptr @sc, i8 11 seq_cst, align 1
  store i8 %8, ptr @sc, align 1
  %9 = atomicrmw sub ptr @uc, i8 11 seq_cst, align 1
  store i8 %9, ptr @uc, align 1
  %10 = atomicrmw sub ptr @ss, i16 11 seq_cst, align 2
  store i16 %10, ptr @ss, align 2
  %11 = atomicrmw sub ptr @us, i16 11 seq_cst, align 2
  store i16 %11, ptr @us, align 2
  %12 = atomicrmw sub ptr @si, i32 11 seq_cst, align 4
  store i32 %12, ptr @si, align 4
  %13 = atomicrmw sub ptr @ui, i32 11 seq_cst, align 4
  store i32 %13, ptr @ui, align 4
  %14 = atomicrmw sub ptr @sll, i64 11 seq_cst, align 8
  store i64 %14, ptr @sll, align 8
  %15 = atomicrmw sub ptr @ull, i64 11 seq_cst, align 8
  store i64 %15, ptr @ull, align 8
  %16 = atomicrmw or ptr @sc, i8 11 seq_cst, align 1
  store i8 %16, ptr @sc, align 1
  %17 = atomicrmw or ptr @uc, i8 11 seq_cst, align 1
  store i8 %17, ptr @uc, align 1
  %18 = atomicrmw or ptr @ss, i16 11 seq_cst, align 2
  store i16 %18, ptr @ss, align 2
  %19 = atomicrmw or ptr @us, i16 11 seq_cst, align 2
  store i16 %19, ptr @us, align 2
  %20 = atomicrmw or ptr @si, i32 11 seq_cst, align 4
  store i32 %20, ptr @si, align 4
  %21 = atomicrmw or ptr @ui, i32 11 seq_cst, align 4
  store i32 %21, ptr @ui, align 4
  %22 = atomicrmw or ptr @sll, i64 11 seq_cst, align 8
  store i64 %22, ptr @sll, align 8
  %23 = atomicrmw or ptr @ull, i64 11 seq_cst, align 8
  store i64 %23, ptr @ull, align 8
  %24 = atomicrmw xor ptr @sc, i8 11 seq_cst, align 1
  store i8 %24, ptr @sc, align 1
  %25 = atomicrmw xor ptr @uc, i8 11 seq_cst, align 1
  store i8 %25, ptr @uc, align 1
  %26 = atomicrmw xor ptr @ss, i16 11 seq_cst, align 2
  store i16 %26, ptr @ss, align 2
  %27 = atomicrmw xor ptr @us, i16 11 seq_cst, align 2
  store i16 %27, ptr @us, align 2
  %28 = atomicrmw xor ptr @si, i32 11 seq_cst, align 4
  store i32 %28, ptr @si, align 4
  %29 = atomicrmw xor ptr @ui, i32 11 seq_cst, align 4
  store i32 %29, ptr @ui, align 4
  %30 = atomicrmw xor ptr @sll, i64 11 seq_cst, align 8
  store i64 %30, ptr @sll, align 8
  %31 = atomicrmw xor ptr @ull, i64 11 seq_cst, align 8
  store i64 %31, ptr @ull, align 8
  %32 = atomicrmw nand ptr @sc, i8 11 seq_cst, align 1
  store i8 %32, ptr @sc, align 1
  %33 = atomicrmw nand ptr @uc, i8 11 seq_cst, align 1
  store i8 %33, ptr @uc, align 1
  %34 = atomicrmw nand ptr @ss, i16 11 seq_cst, align 2
  store i16 %34, ptr @ss, align 2
  %35 = atomicrmw nand ptr @us, i16 11 seq_cst, align 2
  store i16 %35, ptr @us, align 2
  %36 = atomicrmw nand ptr @si, i32 11 seq_cst, align 4
  store i32 %36, ptr @si, align 4
  %37 = atomicrmw nand ptr @ui, i32 11 seq_cst, align 4
  store i32 %37, ptr @ui, align 4
  %38 = atomicrmw nand ptr @sll, i64 11 seq_cst, align 8
  store i64 %38, ptr @sll, align 8
  %39 = atomicrmw nand ptr @ull, i64 11 seq_cst, align 8
  store i64 %39, ptr @ull, align 8
  %40 = atomicrmw and ptr @sc, i8 11 seq_cst, align 1
  store i8 %40, ptr @sc, align 1
  %41 = atomicrmw and ptr @uc, i8 11 seq_cst, align 1
  store i8 %41, ptr @uc, align 1
  %42 = atomicrmw and ptr @ss, i16 11 seq_cst, align 2
  store i16 %42, ptr @ss, align 2
  %43 = atomicrmw and ptr @us, i16 11 seq_cst, align 2
  store i16 %43, ptr @us, align 2
  %44 = atomicrmw and ptr @si, i32 11 seq_cst, align 4
  store i32 %44, ptr @si, align 4
  %45 = atomicrmw and ptr @ui, i32 11 seq_cst, align 4
  store i32 %45, ptr @ui, align 4
  %46 = atomicrmw and ptr @sll, i64 11 seq_cst, align 8
  store i64 %46, ptr @sll, align 8
  %47 = atomicrmw and ptr @ull, i64 11 seq_cst, align 8
  store i64 %47, ptr @ull, align 8
  ret void
}

define dso_local void @test_op_and_fetch() local_unnamed_addr #0 {
; CHECK-LABEL: test_op_and_fetch:
; CHECK:       # %bb.0: # %entry
; CHECK-NEXT:    addis 3, 2, uc@toc@ha
; CHECK-NEXT:    addis 5, 2, sc@toc@ha
; CHECK-NEXT:    std 16, -128(1) # 8-byte Folded Spill
; CHECK-NEXT:    std 17, -120(1) # 8-byte Folded Spill
; CHECK-NEXT:    std 18, -112(1) # 8-byte Folded Spill
; CHECK-NEXT:    std 19, -104(1) # 8-byte Folded Spill
; CHECK-NEXT:    addi 4, 3, uc@toc@l
; CHECK-NEXT:    addi 7, 5, sc@toc@l
; CHECK-NEXT:    lbz 6, uc@toc@l(3)
; CHECK-NEXT:    std 20, -96(1) # 8-byte Folded Spill
; CHECK-NEXT:    std 21, -88(1) # 8-byte Folded Spill
; CHECK-NEXT:    std 22, -80(1) # 8-byte Folded Spill
; CHECK-NEXT:    std 23, -72(1) # 8-byte Folded Spill
; CHECK-NEXT:    std 24, -64(1) # 8-byte Folded Spill
; CHECK-NEXT:    std 25, -56(1) # 8-byte Folded Spill
; CHECK-NEXT:    std 26, -48(1) # 8-byte Folded Spill
; CHECK-NEXT:    std 27, -40(1) # 8-byte Folded Spill
; CHECK-NEXT:    std 28, -32(1) # 8-byte Folded Spill
; CHECK-NEXT:    std 29, -24(1) # 8-byte Folded Spill
; CHECK-NEXT:    std 30, -16(1) # 8-byte Folded Spill
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB2_1: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lbarx 8, 0, 7
; CHECK-NEXT:    add 8, 6, 8
; CHECK-NEXT:    stbcx. 8, 0, 7
; CHECK-NEXT:    bne 0, .LBB2_1
; CHECK-NEXT:  # %bb.2: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    stb 8, sc@toc@l(5)
; CHECK-NEXT:    lbz 6, uc@toc@l(3)
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB2_3: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lbarx 8, 0, 4
; CHECK-NEXT:    add 8, 6, 8
; CHECK-NEXT:    stbcx. 8, 0, 4
; CHECK-NEXT:    bne 0, .LBB2_3
; CHECK-NEXT:  # %bb.4: # %entry
; CHECK-NEXT:    addis 6, 2, ss@toc@ha
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    stb 8, uc@toc@l(3)
; CHECK-NEXT:    clrlwi 8, 8, 24
; CHECK-NEXT:    addi 9, 6, ss@toc@l
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB2_5: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lharx 10, 0, 9
; CHECK-NEXT:    add 10, 8, 10
; CHECK-NEXT:    sthcx. 10, 0, 9
; CHECK-NEXT:    bne 0, .LBB2_5
; CHECK-NEXT:  # %bb.6: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    sth 10, ss@toc@l(6)
; CHECK-NEXT:    addis 8, 2, us@toc@ha
; CHECK-NEXT:    lbz 10, uc@toc@l(3)
; CHECK-NEXT:    addi 11, 8, us@toc@l
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB2_7: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lharx 12, 0, 11
; CHECK-NEXT:    add 12, 10, 12
; CHECK-NEXT:    sthcx. 12, 0, 11
; CHECK-NEXT:    bne 0, .LBB2_7
; CHECK-NEXT:  # %bb.8: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    sth 12, us@toc@l(8)
; CHECK-NEXT:    addis 10, 2, si@toc@ha
; CHECK-NEXT:    lbz 12, uc@toc@l(3)
; CHECK-NEXT:    addi 0, 10, si@toc@l
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB2_9: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lwarx 30, 0, 0
; CHECK-NEXT:    add 30, 12, 30
; CHECK-NEXT:    stwcx. 30, 0, 0
; CHECK-NEXT:    bne 0, .LBB2_9
; CHECK-NEXT:  # %bb.10: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    stw 30, si@toc@l(10)
; CHECK-NEXT:    addis 12, 2, ui@toc@ha
; CHECK-NEXT:    lbz 30, uc@toc@l(3)
; CHECK-NEXT:    addi 29, 12, ui@toc@l
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB2_11: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lwarx 28, 0, 29
; CHECK-NEXT:    add 28, 30, 28
; CHECK-NEXT:    stwcx. 28, 0, 29
; CHECK-NEXT:    bne 0, .LBB2_11
; CHECK-NEXT:  # %bb.12: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    stw 28, ui@toc@l(12)
; CHECK-NEXT:    addis 30, 2, sll@toc@ha
; CHECK-NEXT:    lbz 28, uc@toc@l(3)
; CHECK-NEXT:    addi 27, 30, sll@toc@l
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB2_13: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    ldarx 26, 0, 27
; CHECK-NEXT:    add 26, 28, 26
; CHECK-NEXT:    stdcx. 26, 0, 27
; CHECK-NEXT:    bne 0, .LBB2_13
; CHECK-NEXT:  # %bb.14: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    addis 28, 2, ull@toc@ha
; CHECK-NEXT:    std 26, sll@toc@l(30)
; CHECK-NEXT:    lbz 25, uc@toc@l(3)
; CHECK-NEXT:    addi 26, 28, ull@toc@l
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB2_15: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    ldarx 24, 0, 26
; CHECK-NEXT:    add 24, 25, 24
; CHECK-NEXT:    stdcx. 24, 0, 26
; CHECK-NEXT:    bne 0, .LBB2_15
; CHECK-NEXT:  # %bb.16: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    std 24, ull@toc@l(28)
; CHECK-NEXT:    lbz 25, uc@toc@l(3)
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB2_17: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lbarx 24, 0, 7
; CHECK-NEXT:    sub 24, 24, 25
; CHECK-NEXT:    stbcx. 24, 0, 7
; CHECK-NEXT:    bne 0, .LBB2_17
; CHECK-NEXT:  # %bb.18: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    stb 24, sc@toc@l(5)
; CHECK-NEXT:    lbz 25, uc@toc@l(3)
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB2_19: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lbarx 24, 0, 4
; CHECK-NEXT:    sub 24, 24, 25
; CHECK-NEXT:    stbcx. 24, 0, 4
; CHECK-NEXT:    bne 0, .LBB2_19
; CHECK-NEXT:  # %bb.20: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    stb 24, uc@toc@l(3)
; CHECK-NEXT:    clrlwi 25, 24, 24
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB2_21: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lharx 24, 0, 9
; CHECK-NEXT:    sub 24, 24, 25
; CHECK-NEXT:    sthcx. 24, 0, 9
; CHECK-NEXT:    bne 0, .LBB2_21
; CHECK-NEXT:  # %bb.22: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    sth 24, ss@toc@l(6)
; CHECK-NEXT:    lbz 25, uc@toc@l(3)
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB2_23: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lharx 24, 0, 11
; CHECK-NEXT:    sub 24, 24, 25
; CHECK-NEXT:    sthcx. 24, 0, 11
; CHECK-NEXT:    bne 0, .LBB2_23
; CHECK-NEXT:  # %bb.24: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    sth 24, us@toc@l(8)
; CHECK-NEXT:    lbz 25, uc@toc@l(3)
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB2_25: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lwarx 24, 0, 0
; CHECK-NEXT:    sub 24, 24, 25
; CHECK-NEXT:    stwcx. 24, 0, 0
; CHECK-NEXT:    bne 0, .LBB2_25
; CHECK-NEXT:  # %bb.26: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    stw 24, si@toc@l(10)
; CHECK-NEXT:    lbz 25, uc@toc@l(3)
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB2_27: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lwarx 24, 0, 29
; CHECK-NEXT:    sub 24, 24, 25
; CHECK-NEXT:    stwcx. 24, 0, 29
; CHECK-NEXT:    bne 0, .LBB2_27
; CHECK-NEXT:  # %bb.28: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    stw 24, ui@toc@l(12)
; CHECK-NEXT:    lbz 25, uc@toc@l(3)
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB2_29: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    ldarx 24, 0, 27
; CHECK-NEXT:    sub 24, 24, 25
; CHECK-NEXT:    stdcx. 24, 0, 27
; CHECK-NEXT:    bne 0, .LBB2_29
; CHECK-NEXT:  # %bb.30: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    std 24, sll@toc@l(30)
; CHECK-NEXT:    lbz 25, uc@toc@l(3)
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB2_31: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    ldarx 24, 0, 26
; CHECK-NEXT:    sub 24, 24, 25
; CHECK-NEXT:    stdcx. 24, 0, 26
; CHECK-NEXT:    bne 0, .LBB2_31
; CHECK-NEXT:  # %bb.32: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    std 24, ull@toc@l(28)
; CHECK-NEXT:    lbz 25, uc@toc@l(3)
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB2_33: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lbarx 24, 0, 7
; CHECK-NEXT:    or 24, 25, 24
; CHECK-NEXT:    stbcx. 24, 0, 7
; CHECK-NEXT:    bne 0, .LBB2_33
; CHECK-NEXT:  # %bb.34: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    stb 24, sc@toc@l(5)
; CHECK-NEXT:    lbz 25, uc@toc@l(3)
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB2_35: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lbarx 24, 0, 4
; CHECK-NEXT:    or 24, 25, 24
; CHECK-NEXT:    stbcx. 24, 0, 4
; CHECK-NEXT:    bne 0, .LBB2_35
; CHECK-NEXT:  # %bb.36: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    stb 24, uc@toc@l(3)
; CHECK-NEXT:    clrlwi 25, 24, 24
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB2_37: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lharx 24, 0, 9
; CHECK-NEXT:    or 24, 25, 24
; CHECK-NEXT:    sthcx. 24, 0, 9
; CHECK-NEXT:    bne 0, .LBB2_37
; CHECK-NEXT:  # %bb.38: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    sth 24, ss@toc@l(6)
; CHECK-NEXT:    lbz 25, uc@toc@l(3)
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB2_39: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lharx 24, 0, 11
; CHECK-NEXT:    or 24, 25, 24
; CHECK-NEXT:    sthcx. 24, 0, 11
; CHECK-NEXT:    bne 0, .LBB2_39
; CHECK-NEXT:  # %bb.40: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    sth 24, us@toc@l(8)
; CHECK-NEXT:    lbz 25, uc@toc@l(3)
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB2_41: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lwarx 24, 0, 0
; CHECK-NEXT:    or 24, 25, 24
; CHECK-NEXT:    stwcx. 24, 0, 0
; CHECK-NEXT:    bne 0, .LBB2_41
; CHECK-NEXT:  # %bb.42: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    stw 24, si@toc@l(10)
; CHECK-NEXT:    lbz 25, uc@toc@l(3)
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB2_43: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lwarx 24, 0, 29
; CHECK-NEXT:    or 24, 25, 24
; CHECK-NEXT:    stwcx. 24, 0, 29
; CHECK-NEXT:    bne 0, .LBB2_43
; CHECK-NEXT:  # %bb.44: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    stw 24, ui@toc@l(12)
; CHECK-NEXT:    lbz 25, uc@toc@l(3)
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB2_45: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    ldarx 24, 0, 27
; CHECK-NEXT:    or 24, 25, 24
; CHECK-NEXT:    stdcx. 24, 0, 27
; CHECK-NEXT:    bne 0, .LBB2_45
; CHECK-NEXT:  # %bb.46: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    std 24, sll@toc@l(30)
; CHECK-NEXT:    lbz 25, uc@toc@l(3)
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB2_47: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    ldarx 24, 0, 26
; CHECK-NEXT:    or 24, 25, 24
; CHECK-NEXT:    stdcx. 24, 0, 26
; CHECK-NEXT:    bne 0, .LBB2_47
; CHECK-NEXT:  # %bb.48: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    std 24, ull@toc@l(28)
; CHECK-NEXT:    lbz 25, uc@toc@l(3)
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB2_49: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lbarx 24, 0, 7
; CHECK-NEXT:    xor 24, 25, 24
; CHECK-NEXT:    stbcx. 24, 0, 7
; CHECK-NEXT:    bne 0, .LBB2_49
; CHECK-NEXT:  # %bb.50: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    stb 24, sc@toc@l(5)
; CHECK-NEXT:    lbz 25, uc@toc@l(3)
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB2_51: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lbarx 24, 0, 4
; CHECK-NEXT:    xor 24, 25, 24
; CHECK-NEXT:    stbcx. 24, 0, 4
; CHECK-NEXT:    bne 0, .LBB2_51
; CHECK-NEXT:  # %bb.52: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    stb 24, uc@toc@l(3)
; CHECK-NEXT:    clrlwi 25, 24, 24
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB2_53: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lharx 24, 0, 9
; CHECK-NEXT:    xor 24, 25, 24
; CHECK-NEXT:    sthcx. 24, 0, 9
; CHECK-NEXT:    bne 0, .LBB2_53
; CHECK-NEXT:  # %bb.54: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    sth 24, ss@toc@l(6)
; CHECK-NEXT:    lbz 25, uc@toc@l(3)
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB2_55: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lharx 24, 0, 11
; CHECK-NEXT:    xor 24, 25, 24
; CHECK-NEXT:    sthcx. 24, 0, 11
; CHECK-NEXT:    bne 0, .LBB2_55
; CHECK-NEXT:  # %bb.56: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    sth 24, us@toc@l(8)
; CHECK-NEXT:    lbz 25, uc@toc@l(3)
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB2_57: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lwarx 24, 0, 0
; CHECK-NEXT:    xor 24, 25, 24
; CHECK-NEXT:    stwcx. 24, 0, 0
; CHECK-NEXT:    bne 0, .LBB2_57
; CHECK-NEXT:  # %bb.58: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    stw 24, si@toc@l(10)
; CHECK-NEXT:    lbz 25, uc@toc@l(3)
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB2_59: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lwarx 24, 0, 29
; CHECK-NEXT:    xor 24, 25, 24
; CHECK-NEXT:    stwcx. 24, 0, 29
; CHECK-NEXT:    bne 0, .LBB2_59
; CHECK-NEXT:  # %bb.60: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    stw 24, ui@toc@l(12)
; CHECK-NEXT:    lbz 25, uc@toc@l(3)
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB2_61: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    ldarx 24, 0, 27
; CHECK-NEXT:    xor 24, 25, 24
; CHECK-NEXT:    stdcx. 24, 0, 27
; CHECK-NEXT:    bne 0, .LBB2_61
; CHECK-NEXT:  # %bb.62: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    std 24, sll@toc@l(30)
; CHECK-NEXT:    lbz 25, uc@toc@l(3)
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB2_63: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    ldarx 24, 0, 26
; CHECK-NEXT:    xor 24, 25, 24
; CHECK-NEXT:    stdcx. 24, 0, 26
; CHECK-NEXT:    bne 0, .LBB2_63
; CHECK-NEXT:  # %bb.64: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    std 24, ull@toc@l(28)
; CHECK-NEXT:    lbz 25, uc@toc@l(3)
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB2_65: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lbarx 24, 0, 7
; CHECK-NEXT:    nand 24, 25, 24
; CHECK-NEXT:    stbcx. 24, 0, 7
; CHECK-NEXT:    bne 0, .LBB2_65
; CHECK-NEXT:  # %bb.66: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    stb 24, sc@toc@l(5)
; CHECK-NEXT:    lbz 25, uc@toc@l(3)
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB2_67: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lbarx 24, 0, 4
; CHECK-NEXT:    nand 24, 25, 24
; CHECK-NEXT:    stbcx. 24, 0, 4
; CHECK-NEXT:    bne 0, .LBB2_67
; CHECK-NEXT:  # %bb.68: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    stb 24, uc@toc@l(3)
; CHECK-NEXT:    clrlwi 25, 24, 24
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB2_69: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lharx 24, 0, 9
; CHECK-NEXT:    nand 24, 25, 24
; CHECK-NEXT:    sthcx. 24, 0, 9
; CHECK-NEXT:    bne 0, .LBB2_69
; CHECK-NEXT:  # %bb.70: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    sth 24, ss@toc@l(6)
; CHECK-NEXT:    lbz 25, uc@toc@l(3)
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB2_71: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lharx 24, 0, 11
; CHECK-NEXT:    nand 24, 25, 24
; CHECK-NEXT:    sthcx. 24, 0, 11
; CHECK-NEXT:    bne 0, .LBB2_71
; CHECK-NEXT:  # %bb.72: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    sth 24, us@toc@l(8)
; CHECK-NEXT:    lbz 25, uc@toc@l(3)
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB2_73: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lwarx 24, 0, 0
; CHECK-NEXT:    nand 24, 25, 24
; CHECK-NEXT:    stwcx. 24, 0, 0
; CHECK-NEXT:    bne 0, .LBB2_73
; CHECK-NEXT:  # %bb.74: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    stw 24, si@toc@l(10)
; CHECK-NEXT:    lbz 25, uc@toc@l(3)
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB2_75: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lwarx 24, 0, 29
; CHECK-NEXT:    nand 24, 25, 24
; CHECK-NEXT:    stwcx. 24, 0, 29
; CHECK-NEXT:    bne 0, .LBB2_75
; CHECK-NEXT:  # %bb.76: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    stw 24, ui@toc@l(12)
; CHECK-NEXT:    lbz 25, uc@toc@l(3)
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB2_77: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    ldarx 24, 0, 27
; CHECK-NEXT:    nand 24, 25, 24
; CHECK-NEXT:    stdcx. 24, 0, 27
; CHECK-NEXT:    bne 0, .LBB2_77
; CHECK-NEXT:  # %bb.78: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    std 24, sll@toc@l(30)
; CHECK-NEXT:    lbz 25, uc@toc@l(3)
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB2_79: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    ldarx 24, 0, 26
; CHECK-NEXT:    nand 24, 25, 24
; CHECK-NEXT:    stdcx. 24, 0, 26
; CHECK-NEXT:    bne 0, .LBB2_79
; CHECK-NEXT:  # %bb.80: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    std 24, ull@toc@l(28)
; CHECK-NEXT:    addis 24, 2, u128@toc@ha
; CHECK-NEXT:    li 22, 0
; CHECK-NEXT:    lbz 25, uc@toc@l(3)
; CHECK-NEXT:    sync
; CHECK-NEXT:    addi 23, 24, u128@toc@l
; CHECK-NEXT:  .LBB2_81: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lqarx 20, 0, 23
; CHECK-NEXT:    nand 19, 25, 21
; CHECK-NEXT:    nand 18, 22, 20
; CHECK-NEXT:    stqcx. 18, 0, 23
; CHECK-NEXT:    bne 0, .LBB2_81
; CHECK-NEXT:  # %bb.82: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    lbz 20, uc@toc@l(3)
; CHECK-NEXT:    nand 25, 21, 25
; CHECK-NEXT:    li 21, -1
; CHECK-NEXT:    std 21, 8(23)
; CHECK-NEXT:    std 25, u128@toc@l(24)
; CHECK-NEXT:    addis 25, 2, s128@toc@ha
; CHECK-NEXT:    sync
; CHECK-NEXT:    addi 24, 25, s128@toc@l
; CHECK-NEXT:  .LBB2_83: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lqarx 18, 0, 24
; CHECK-NEXT:    nand 17, 20, 19
; CHECK-NEXT:    nand 16, 22, 18
; CHECK-NEXT:    stqcx. 16, 0, 24
; CHECK-NEXT:    bne 0, .LBB2_83
; CHECK-NEXT:  # %bb.84: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    std 21, 8(24)
; CHECK-NEXT:    nand 23, 19, 20
; CHECK-NEXT:    std 23, s128@toc@l(25)
; CHECK-NEXT:    lbz 25, uc@toc@l(3)
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB2_85: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lbarx 24, 0, 7
; CHECK-NEXT:    and 24, 25, 24
; CHECK-NEXT:    stbcx. 24, 0, 7
; CHECK-NEXT:    bne 0, .LBB2_85
; CHECK-NEXT:  # %bb.86: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    stb 24, sc@toc@l(5)
; CHECK-NEXT:    lbz 7, uc@toc@l(3)
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB2_87: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lbarx 5, 0, 4
; CHECK-NEXT:    and 5, 7, 5
; CHECK-NEXT:    stbcx. 5, 0, 4
; CHECK-NEXT:    bne 0, .LBB2_87
; CHECK-NEXT:  # %bb.88: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    stb 5, uc@toc@l(3)
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB2_89: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lharx 4, 0, 9
; CHECK-NEXT:    and 4, 5, 4
; CHECK-NEXT:    sthcx. 4, 0, 9
; CHECK-NEXT:    bne 0, .LBB2_89
; CHECK-NEXT:  # %bb.90: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    sth 4, ss@toc@l(6)
; CHECK-NEXT:    lbz 4, uc@toc@l(3)
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB2_91: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lharx 5, 0, 11
; CHECK-NEXT:    and 5, 4, 5
; CHECK-NEXT:    sthcx. 5, 0, 11
; CHECK-NEXT:    bne 0, .LBB2_91
; CHECK-NEXT:  # %bb.92: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    sth 5, us@toc@l(8)
; CHECK-NEXT:    lbz 4, uc@toc@l(3)
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB2_93: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lwarx 5, 0, 0
; CHECK-NEXT:    and 5, 4, 5
; CHECK-NEXT:    stwcx. 5, 0, 0
; CHECK-NEXT:    bne 0, .LBB2_93
; CHECK-NEXT:  # %bb.94: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    stw 5, si@toc@l(10)
; CHECK-NEXT:    lbz 4, uc@toc@l(3)
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB2_95: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lwarx 5, 0, 29
; CHECK-NEXT:    and 5, 4, 5
; CHECK-NEXT:    stwcx. 5, 0, 29
; CHECK-NEXT:    bne 0, .LBB2_95
; CHECK-NEXT:  # %bb.96: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    stw 5, ui@toc@l(12)
; CHECK-NEXT:    lbz 4, uc@toc@l(3)
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB2_97: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    ldarx 5, 0, 27
; CHECK-NEXT:    and 5, 4, 5
; CHECK-NEXT:    stdcx. 5, 0, 27
; CHECK-NEXT:    bne 0, .LBB2_97
; CHECK-NEXT:  # %bb.98: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    std 5, sll@toc@l(30)
; CHECK-NEXT:    lbz 3, uc@toc@l(3)
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB2_99: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    ldarx 4, 0, 26
; CHECK-NEXT:    and 4, 3, 4
; CHECK-NEXT:    stdcx. 4, 0, 26
; CHECK-NEXT:    bne 0, .LBB2_99
; CHECK-NEXT:  # %bb.100: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    std 4, ull@toc@l(28)
; CHECK-NEXT:    ld 30, -16(1) # 8-byte Folded Reload
; CHECK-NEXT:    ld 29, -24(1) # 8-byte Folded Reload
; CHECK-NEXT:    ld 28, -32(1) # 8-byte Folded Reload
; CHECK-NEXT:    ld 27, -40(1) # 8-byte Folded Reload
; CHECK-NEXT:    ld 26, -48(1) # 8-byte Folded Reload
; CHECK-NEXT:    ld 25, -56(1) # 8-byte Folded Reload
; CHECK-NEXT:    ld 24, -64(1) # 8-byte Folded Reload
; CHECK-NEXT:    ld 23, -72(1) # 8-byte Folded Reload
; CHECK-NEXT:    ld 22, -80(1) # 8-byte Folded Reload
; CHECK-NEXT:    ld 21, -88(1) # 8-byte Folded Reload
; CHECK-NEXT:    ld 20, -96(1) # 8-byte Folded Reload
; CHECK-NEXT:    ld 19, -104(1) # 8-byte Folded Reload
; CHECK-NEXT:    ld 18, -112(1) # 8-byte Folded Reload
; CHECK-NEXT:    ld 17, -120(1) # 8-byte Folded Reload
; CHECK-NEXT:    ld 16, -128(1) # 8-byte Folded Reload
; CHECK-NEXT:    blr
;
; AIX32-LABEL: test_op_and_fetch:
; AIX32:       # %bb.0: # %entry
; AIX32-NEXT:    mflr 0
; AIX32-NEXT:    stwu 1, -176(1)
; AIX32-NEXT:    stw 0, 184(1)
; AIX32-NEXT:    stw 24, 144(1) # 4-byte Folded Spill
; AIX32-NEXT:    lwz 24, L..C0(2) # @sc
; AIX32-NEXT:    stw 26, 152(1) # 4-byte Folded Spill
; AIX32-NEXT:    lwz 26, L..C1(2) # @uc
; AIX32-NEXT:    stw 23, 140(1) # 4-byte Folded Spill
; AIX32-NEXT:    li 5, 255
; AIX32-NEXT:    stw 13, 100(1) # 4-byte Folded Spill
; AIX32-NEXT:    rlwinm 4, 24, 3, 27, 28
; AIX32-NEXT:    stw 14, 104(1) # 4-byte Folded Spill
; AIX32-NEXT:    lbz 3, 0(26)
; AIX32-NEXT:    xori 23, 4, 24
; AIX32-NEXT:    stw 15, 108(1) # 4-byte Folded Spill
; AIX32-NEXT:    stw 16, 112(1) # 4-byte Folded Spill
; AIX32-NEXT:    stw 17, 116(1) # 4-byte Folded Spill
; AIX32-NEXT:    stw 18, 120(1) # 4-byte Folded Spill
; AIX32-NEXT:    stw 19, 124(1) # 4-byte Folded Spill
; AIX32-NEXT:    stw 20, 128(1) # 4-byte Folded Spill
; AIX32-NEXT:    stw 21, 132(1) # 4-byte Folded Spill
; AIX32-NEXT:    stw 22, 136(1) # 4-byte Folded Spill
; AIX32-NEXT:    stw 25, 148(1) # 4-byte Folded Spill
; AIX32-NEXT:    stw 27, 156(1) # 4-byte Folded Spill
; AIX32-NEXT:    stw 28, 160(1) # 4-byte Folded Spill
; AIX32-NEXT:    stw 29, 164(1) # 4-byte Folded Spill
; AIX32-NEXT:    stw 30, 168(1) # 4-byte Folded Spill
; AIX32-NEXT:    stw 31, 172(1) # 4-byte Folded Spill
; AIX32-NEXT:    rlwinm 22, 24, 0, 0, 29
; AIX32-NEXT:    li 25, -1
; AIX32-NEXT:    slw 4, 3, 23
; AIX32-NEXT:    slw 6, 5, 23
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB2_1: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 5, 0, 22
; AIX32-NEXT:    add 7, 4, 5
; AIX32-NEXT:    andc 8, 5, 6
; AIX32-NEXT:    and 7, 7, 6
; AIX32-NEXT:    or 7, 7, 8
; AIX32-NEXT:    stwcx. 7, 0, 22
; AIX32-NEXT:    bne 0, L..BB2_1
; AIX32-NEXT:  # %bb.2: # %entry
; AIX32-NEXT:    srw 4, 5, 23
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    rlwinm 5, 26, 3, 27, 28
; AIX32-NEXT:    clrlwi 4, 4, 24
; AIX32-NEXT:    xori 21, 5, 24
; AIX32-NEXT:    li 5, 255
; AIX32-NEXT:    add 4, 4, 3
; AIX32-NEXT:    lbz 3, 0(26)
; AIX32-NEXT:    rlwinm 19, 26, 0, 0, 29
; AIX32-NEXT:    stb 4, 0(24)
; AIX32-NEXT:    slw 5, 5, 21
; AIX32-NEXT:    slw 4, 3, 21
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB2_3: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 6, 0, 19
; AIX32-NEXT:    add 7, 4, 6
; AIX32-NEXT:    andc 8, 6, 5
; AIX32-NEXT:    and 7, 7, 5
; AIX32-NEXT:    or 7, 7, 8
; AIX32-NEXT:    stwcx. 7, 0, 19
; AIX32-NEXT:    bne 0, L..BB2_3
; AIX32-NEXT:  # %bb.4: # %entry
; AIX32-NEXT:    lwz 9, L..C2(2) # @ss
; AIX32-NEXT:    srw 4, 6, 21
; AIX32-NEXT:    li 5, 0
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    clrlwi 4, 4, 24
; AIX32-NEXT:    ori 5, 5, 65535
; AIX32-NEXT:    add 3, 4, 3
; AIX32-NEXT:    rlwinm 4, 9, 3, 27, 27
; AIX32-NEXT:    stb 3, 0(26)
; AIX32-NEXT:    clrlwi 3, 3, 24
; AIX32-NEXT:    xori 18, 4, 16
; AIX32-NEXT:    sync
; AIX32-NEXT:    rlwinm 17, 9, 0, 0, 29
; AIX32-NEXT:    slw 4, 3, 18
; AIX32-NEXT:    slw 5, 5, 18
; AIX32-NEXT:  L..BB2_5: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 6, 0, 17
; AIX32-NEXT:    add 7, 4, 6
; AIX32-NEXT:    andc 8, 6, 5
; AIX32-NEXT:    and 7, 7, 5
; AIX32-NEXT:    or 7, 7, 8
; AIX32-NEXT:    stwcx. 7, 0, 17
; AIX32-NEXT:    bne 0, L..BB2_5
; AIX32-NEXT:  # %bb.6: # %entry
; AIX32-NEXT:    srw 4, 6, 18
; AIX32-NEXT:    lwz 20, L..C3(2) # @us
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    li 5, 0
; AIX32-NEXT:    clrlwi 4, 4, 16
; AIX32-NEXT:    ori 5, 5, 65535
; AIX32-NEXT:    add 3, 4, 3
; AIX32-NEXT:    sth 3, 0(9)
; AIX32-NEXT:    lbz 3, 0(26)
; AIX32-NEXT:    rlwinm 4, 20, 3, 27, 27
; AIX32-NEXT:    xori 15, 4, 16
; AIX32-NEXT:    rlwinm 14, 20, 0, 0, 29
; AIX32-NEXT:    sync
; AIX32-NEXT:    slw 4, 3, 15
; AIX32-NEXT:    slw 5, 5, 15
; AIX32-NEXT:  L..BB2_7: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 6, 0, 14
; AIX32-NEXT:    add 7, 4, 6
; AIX32-NEXT:    andc 8, 6, 5
; AIX32-NEXT:    and 7, 7, 5
; AIX32-NEXT:    or 7, 7, 8
; AIX32-NEXT:    stwcx. 7, 0, 14
; AIX32-NEXT:    bne 0, L..BB2_7
; AIX32-NEXT:  # %bb.8: # %entry
; AIX32-NEXT:    srw 4, 6, 15
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    lwz 13, L..C4(2) # @si
; AIX32-NEXT:    clrlwi 4, 4, 16
; AIX32-NEXT:    add 3, 4, 3
; AIX32-NEXT:    sth 3, 0(20)
; AIX32-NEXT:    lbz 3, 0(26)
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB2_9: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 4, 0, 13
; AIX32-NEXT:    add 4, 3, 4
; AIX32-NEXT:    stwcx. 4, 0, 13
; AIX32-NEXT:    bne 0, L..BB2_9
; AIX32-NEXT:  # %bb.10: # %entry
; AIX32-NEXT:    stw 9, 60(1) # 4-byte Folded Spill
; AIX32-NEXT:    lwz 16, L..C5(2) # @ui
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    stw 4, 0(13)
; AIX32-NEXT:    lbz 3, 0(26)
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB2_11: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 4, 0, 16
; AIX32-NEXT:    add 4, 3, 4
; AIX32-NEXT:    stwcx. 4, 0, 16
; AIX32-NEXT:    bne 0, L..BB2_11
; AIX32-NEXT:  # %bb.12: # %entry
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    lwz 31, L..C6(2) # @sll
; AIX32-NEXT:    stw 4, 0(16)
; AIX32-NEXT:    li 4, 0
; AIX32-NEXT:    li 6, 5
; AIX32-NEXT:    lbz 29, 0(26)
; AIX32-NEXT:    li 27, 0
; AIX32-NEXT:    mr 3, 31
; AIX32-NEXT:    mr 5, 29
; AIX32-NEXT:    bl .__atomic_fetch_add_8[PR]
; AIX32-NEXT:    nop
; AIX32-NEXT:    lwz 30, L..C7(2) # @ull
; AIX32-NEXT:    lbz 28, 0(26)
; AIX32-NEXT:    addc 7, 4, 29
; AIX32-NEXT:    li 4, 0
; AIX32-NEXT:    li 6, 5
; AIX32-NEXT:    addze 8, 3
; AIX32-NEXT:    stw 7, 4(31)
; AIX32-NEXT:    mr 5, 28
; AIX32-NEXT:    stw 8, 0(31)
; AIX32-NEXT:    mr 3, 30
; AIX32-NEXT:    bl .__atomic_fetch_add_8[PR]
; AIX32-NEXT:    nop
; AIX32-NEXT:    lbz 5, 0(26)
; AIX32-NEXT:    addc 4, 4, 28
; AIX32-NEXT:    addze 3, 3
; AIX32-NEXT:    stw 4, 4(30)
; AIX32-NEXT:    li 4, 255
; AIX32-NEXT:    stw 3, 0(30)
; AIX32-NEXT:    slw 3, 5, 23
; AIX32-NEXT:    slw 4, 4, 23
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB2_13: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 6, 0, 22
; AIX32-NEXT:    sub 7, 6, 3
; AIX32-NEXT:    andc 8, 6, 4
; AIX32-NEXT:    and 7, 7, 4
; AIX32-NEXT:    or 7, 7, 8
; AIX32-NEXT:    stwcx. 7, 0, 22
; AIX32-NEXT:    bne 0, L..BB2_13
; AIX32-NEXT:  # %bb.14: # %entry
; AIX32-NEXT:    srw 3, 6, 23
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    clrlwi 3, 3, 24
; AIX32-NEXT:    sub 4, 3, 5
; AIX32-NEXT:    lbz 3, 0(26)
; AIX32-NEXT:    li 5, 255
; AIX32-NEXT:    stb 4, 0(24)
; AIX32-NEXT:    slw 5, 5, 21
; AIX32-NEXT:    slw 4, 3, 21
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB2_15: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 6, 0, 19
; AIX32-NEXT:    sub 7, 6, 4
; AIX32-NEXT:    andc 8, 6, 5
; AIX32-NEXT:    and 7, 7, 5
; AIX32-NEXT:    or 7, 7, 8
; AIX32-NEXT:    stwcx. 7, 0, 19
; AIX32-NEXT:    bne 0, L..BB2_15
; AIX32-NEXT:  # %bb.16: # %entry
; AIX32-NEXT:    srw 4, 6, 21
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    clrlwi 4, 4, 24
; AIX32-NEXT:    sub 3, 4, 3
; AIX32-NEXT:    li 4, 0
; AIX32-NEXT:    stb 3, 0(26)
; AIX32-NEXT:    clrlwi 3, 3, 24
; AIX32-NEXT:    ori 5, 4, 65535
; AIX32-NEXT:    slw 4, 3, 18
; AIX32-NEXT:    slw 5, 5, 18
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB2_17: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 6, 0, 17
; AIX32-NEXT:    sub 7, 6, 4
; AIX32-NEXT:    andc 8, 6, 5
; AIX32-NEXT:    and 7, 7, 5
; AIX32-NEXT:    or 7, 7, 8
; AIX32-NEXT:    stwcx. 7, 0, 17
; AIX32-NEXT:    bne 0, L..BB2_17
; AIX32-NEXT:  # %bb.18: # %entry
; AIX32-NEXT:    srw 4, 6, 18
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    li 5, 0
; AIX32-NEXT:    clrlwi 4, 4, 16
; AIX32-NEXT:    lwz 6, 60(1) # 4-byte Folded Reload
; AIX32-NEXT:    ori 5, 5, 65535
; AIX32-NEXT:    sub 4, 4, 3
; AIX32-NEXT:    lbz 3, 0(26)
; AIX32-NEXT:    slw 5, 5, 15
; AIX32-NEXT:    sth 4, 0(6)
; AIX32-NEXT:    slw 4, 3, 15
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB2_19: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 6, 0, 14
; AIX32-NEXT:    sub 7, 6, 4
; AIX32-NEXT:    andc 8, 6, 5
; AIX32-NEXT:    and 7, 7, 5
; AIX32-NEXT:    or 7, 7, 8
; AIX32-NEXT:    stwcx. 7, 0, 14
; AIX32-NEXT:    bne 0, L..BB2_19
; AIX32-NEXT:  # %bb.20: # %entry
; AIX32-NEXT:    srw 4, 6, 15
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    clrlwi 4, 4, 16
; AIX32-NEXT:    sub 3, 4, 3
; AIX32-NEXT:    sth 3, 0(20)
; AIX32-NEXT:    lbz 3, 0(26)
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB2_21: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 4, 0, 13
; AIX32-NEXT:    sub 4, 4, 3
; AIX32-NEXT:    stwcx. 4, 0, 13
; AIX32-NEXT:    bne 0, L..BB2_21
; AIX32-NEXT:  # %bb.22: # %entry
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    stw 4, 0(13)
; AIX32-NEXT:    lbz 3, 0(26)
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB2_23: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 4, 0, 16
; AIX32-NEXT:    sub 7, 4, 3
; AIX32-NEXT:    stwcx. 7, 0, 16
; AIX32-NEXT:    bne 0, L..BB2_23
; AIX32-NEXT:  # %bb.24: # %entry
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    mr 3, 31
; AIX32-NEXT:    li 4, 0
; AIX32-NEXT:    li 6, 5
; AIX32-NEXT:    lbz 29, 0(26)
; AIX32-NEXT:    stw 7, 0(16)
; AIX32-NEXT:    mr 5, 29
; AIX32-NEXT:    bl .__atomic_fetch_sub_8[PR]
; AIX32-NEXT:    nop
; AIX32-NEXT:    lbz 28, 0(26)
; AIX32-NEXT:    subc 7, 4, 29
; AIX32-NEXT:    li 4, 0
; AIX32-NEXT:    li 6, 5
; AIX32-NEXT:    subfe 8, 27, 3
; AIX32-NEXT:    mr 3, 30
; AIX32-NEXT:    mr 5, 28
; AIX32-NEXT:    stw 7, 4(31)
; AIX32-NEXT:    stw 8, 0(31)
; AIX32-NEXT:    bl .__atomic_fetch_sub_8[PR]
; AIX32-NEXT:    nop
; AIX32-NEXT:    lbz 5, 0(26)
; AIX32-NEXT:    subc 4, 4, 28
; AIX32-NEXT:    subfe 3, 27, 3
; AIX32-NEXT:    stw 4, 4(30)
; AIX32-NEXT:    li 4, 255
; AIX32-NEXT:    stw 3, 0(30)
; AIX32-NEXT:    slw 3, 5, 23
; AIX32-NEXT:    slw 4, 4, 23
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB2_25: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 6, 0, 22
; AIX32-NEXT:    or 7, 3, 6
; AIX32-NEXT:    andc 8, 6, 4
; AIX32-NEXT:    and 7, 7, 4
; AIX32-NEXT:    or 7, 7, 8
; AIX32-NEXT:    stwcx. 7, 0, 22
; AIX32-NEXT:    bne 0, L..BB2_25
; AIX32-NEXT:  # %bb.26: # %entry
; AIX32-NEXT:    srw 3, 6, 23
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    clrlwi 3, 3, 24
; AIX32-NEXT:    or 4, 3, 5
; AIX32-NEXT:    lbz 3, 0(26)
; AIX32-NEXT:    li 5, 255
; AIX32-NEXT:    stb 4, 0(24)
; AIX32-NEXT:    slw 5, 5, 21
; AIX32-NEXT:    sync
; AIX32-NEXT:    slw 4, 3, 21
; AIX32-NEXT:    lwz 27, 60(1) # 4-byte Folded Reload
; AIX32-NEXT:  L..BB2_27: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 6, 0, 19
; AIX32-NEXT:    or 7, 4, 6
; AIX32-NEXT:    andc 8, 6, 5
; AIX32-NEXT:    and 7, 7, 5
; AIX32-NEXT:    or 7, 7, 8
; AIX32-NEXT:    stwcx. 7, 0, 19
; AIX32-NEXT:    bne 0, L..BB2_27
; AIX32-NEXT:  # %bb.28: # %entry
; AIX32-NEXT:    srw 4, 6, 21
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    clrlwi 4, 4, 24
; AIX32-NEXT:    or 3, 4, 3
; AIX32-NEXT:    li 4, 0
; AIX32-NEXT:    stb 3, 0(26)
; AIX32-NEXT:    clrlwi 3, 3, 24
; AIX32-NEXT:    ori 5, 4, 65535
; AIX32-NEXT:    slw 4, 3, 18
; AIX32-NEXT:    slw 5, 5, 18
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB2_29: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 6, 0, 17
; AIX32-NEXT:    or 7, 4, 6
; AIX32-NEXT:    andc 8, 6, 5
; AIX32-NEXT:    and 7, 7, 5
; AIX32-NEXT:    or 7, 7, 8
; AIX32-NEXT:    stwcx. 7, 0, 17
; AIX32-NEXT:    bne 0, L..BB2_29
; AIX32-NEXT:  # %bb.30: # %entry
; AIX32-NEXT:    srw 4, 6, 18
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    li 5, 0
; AIX32-NEXT:    clrlwi 4, 4, 16
; AIX32-NEXT:    ori 5, 5, 65535
; AIX32-NEXT:    or 4, 4, 3
; AIX32-NEXT:    lbz 3, 0(26)
; AIX32-NEXT:    slw 5, 5, 15
; AIX32-NEXT:    sth 4, 0(27)
; AIX32-NEXT:    slw 4, 3, 15
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB2_31: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 6, 0, 14
; AIX32-NEXT:    or 7, 4, 6
; AIX32-NEXT:    andc 8, 6, 5
; AIX32-NEXT:    and 7, 7, 5
; AIX32-NEXT:    or 7, 7, 8
; AIX32-NEXT:    stwcx. 7, 0, 14
; AIX32-NEXT:    bne 0, L..BB2_31
; AIX32-NEXT:  # %bb.32: # %entry
; AIX32-NEXT:    srw 4, 6, 15
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    clrlwi 4, 4, 16
; AIX32-NEXT:    or 3, 4, 3
; AIX32-NEXT:    sth 3, 0(20)
; AIX32-NEXT:    lbz 3, 0(26)
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB2_33: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 4, 0, 13
; AIX32-NEXT:    or 4, 3, 4
; AIX32-NEXT:    stwcx. 4, 0, 13
; AIX32-NEXT:    bne 0, L..BB2_33
; AIX32-NEXT:  # %bb.34: # %entry
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    stw 4, 0(13)
; AIX32-NEXT:    lbz 3, 0(26)
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB2_35: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 4, 0, 16
; AIX32-NEXT:    or 7, 3, 4
; AIX32-NEXT:    stwcx. 7, 0, 16
; AIX32-NEXT:    bne 0, L..BB2_35
; AIX32-NEXT:  # %bb.36: # %entry
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    mr 3, 31
; AIX32-NEXT:    li 4, 0
; AIX32-NEXT:    li 6, 5
; AIX32-NEXT:    lbz 29, 0(26)
; AIX32-NEXT:    stw 7, 0(16)
; AIX32-NEXT:    mr 5, 29
; AIX32-NEXT:    bl .__atomic_fetch_or_8[PR]
; AIX32-NEXT:    nop
; AIX32-NEXT:    lbz 28, 0(26)
; AIX32-NEXT:    mr 7, 3
; AIX32-NEXT:    or 8, 4, 29
; AIX32-NEXT:    mr 3, 30
; AIX32-NEXT:    li 4, 0
; AIX32-NEXT:    li 6, 5
; AIX32-NEXT:    mr 5, 28
; AIX32-NEXT:    stw 7, 0(31)
; AIX32-NEXT:    stw 8, 4(31)
; AIX32-NEXT:    bl .__atomic_fetch_or_8[PR]
; AIX32-NEXT:    nop
; AIX32-NEXT:    lbz 5, 0(26)
; AIX32-NEXT:    or 4, 4, 28
; AIX32-NEXT:    stw 3, 0(30)
; AIX32-NEXT:    stw 4, 4(30)
; AIX32-NEXT:    li 4, 255
; AIX32-NEXT:    slw 3, 5, 23
; AIX32-NEXT:    slw 4, 4, 23
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB2_37: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 6, 0, 22
; AIX32-NEXT:    xor 7, 3, 6
; AIX32-NEXT:    andc 8, 6, 4
; AIX32-NEXT:    and 7, 7, 4
; AIX32-NEXT:    or 7, 7, 8
; AIX32-NEXT:    stwcx. 7, 0, 22
; AIX32-NEXT:    bne 0, L..BB2_37
; AIX32-NEXT:  # %bb.38: # %entry
; AIX32-NEXT:    srw 3, 6, 23
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    clrlwi 3, 3, 24
; AIX32-NEXT:    xor 4, 3, 5
; AIX32-NEXT:    lbz 3, 0(26)
; AIX32-NEXT:    li 5, 255
; AIX32-NEXT:    stb 4, 0(24)
; AIX32-NEXT:    slw 5, 5, 21
; AIX32-NEXT:    slw 4, 3, 21
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB2_39: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 6, 0, 19
; AIX32-NEXT:    xor 7, 4, 6
; AIX32-NEXT:    andc 8, 6, 5
; AIX32-NEXT:    and 7, 7, 5
; AIX32-NEXT:    or 7, 7, 8
; AIX32-NEXT:    stwcx. 7, 0, 19
; AIX32-NEXT:    bne 0, L..BB2_39
; AIX32-NEXT:  # %bb.40: # %entry
; AIX32-NEXT:    srw 4, 6, 21
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    clrlwi 4, 4, 24
; AIX32-NEXT:    xor 3, 4, 3
; AIX32-NEXT:    li 4, 0
; AIX32-NEXT:    stb 3, 0(26)
; AIX32-NEXT:    clrlwi 3, 3, 24
; AIX32-NEXT:    ori 5, 4, 65535
; AIX32-NEXT:    slw 4, 3, 18
; AIX32-NEXT:    slw 5, 5, 18
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB2_41: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 6, 0, 17
; AIX32-NEXT:    xor 7, 4, 6
; AIX32-NEXT:    andc 8, 6, 5
; AIX32-NEXT:    and 7, 7, 5
; AIX32-NEXT:    or 7, 7, 8
; AIX32-NEXT:    stwcx. 7, 0, 17
; AIX32-NEXT:    bne 0, L..BB2_41
; AIX32-NEXT:  # %bb.42: # %entry
; AIX32-NEXT:    srw 4, 6, 18
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    li 5, 0
; AIX32-NEXT:    clrlwi 4, 4, 16
; AIX32-NEXT:    ori 5, 5, 65535
; AIX32-NEXT:    xor 4, 4, 3
; AIX32-NEXT:    lbz 3, 0(26)
; AIX32-NEXT:    slw 5, 5, 15
; AIX32-NEXT:    sth 4, 0(27)
; AIX32-NEXT:    slw 4, 3, 15
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB2_43: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 6, 0, 14
; AIX32-NEXT:    xor 7, 4, 6
; AIX32-NEXT:    andc 8, 6, 5
; AIX32-NEXT:    and 7, 7, 5
; AIX32-NEXT:    or 7, 7, 8
; AIX32-NEXT:    stwcx. 7, 0, 14
; AIX32-NEXT:    bne 0, L..BB2_43
; AIX32-NEXT:  # %bb.44: # %entry
; AIX32-NEXT:    srw 4, 6, 15
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    clrlwi 4, 4, 16
; AIX32-NEXT:    xor 3, 4, 3
; AIX32-NEXT:    sth 3, 0(20)
; AIX32-NEXT:    lbz 3, 0(26)
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB2_45: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 4, 0, 13
; AIX32-NEXT:    xor 4, 3, 4
; AIX32-NEXT:    stwcx. 4, 0, 13
; AIX32-NEXT:    bne 0, L..BB2_45
; AIX32-NEXT:  # %bb.46: # %entry
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    stw 4, 0(13)
; AIX32-NEXT:    lbz 3, 0(26)
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB2_47: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 4, 0, 16
; AIX32-NEXT:    xor 7, 3, 4
; AIX32-NEXT:    stwcx. 7, 0, 16
; AIX32-NEXT:    bne 0, L..BB2_47
; AIX32-NEXT:  # %bb.48: # %entry
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    mr 3, 31
; AIX32-NEXT:    li 4, 0
; AIX32-NEXT:    li 6, 5
; AIX32-NEXT:    lbz 29, 0(26)
; AIX32-NEXT:    stw 7, 0(16)
; AIX32-NEXT:    mr 5, 29
; AIX32-NEXT:    bl .__atomic_fetch_xor_8[PR]
; AIX32-NEXT:    nop
; AIX32-NEXT:    lbz 28, 0(26)
; AIX32-NEXT:    mr 7, 3
; AIX32-NEXT:    xor 8, 4, 29
; AIX32-NEXT:    mr 3, 30
; AIX32-NEXT:    li 4, 0
; AIX32-NEXT:    li 6, 5
; AIX32-NEXT:    mr 5, 28
; AIX32-NEXT:    stw 7, 0(31)
; AIX32-NEXT:    stw 8, 4(31)
; AIX32-NEXT:    bl .__atomic_fetch_xor_8[PR]
; AIX32-NEXT:    nop
; AIX32-NEXT:    lbz 5, 0(26)
; AIX32-NEXT:    xor 4, 4, 28
; AIX32-NEXT:    stw 3, 0(30)
; AIX32-NEXT:    stw 4, 4(30)
; AIX32-NEXT:    li 4, 255
; AIX32-NEXT:    slw 3, 5, 23
; AIX32-NEXT:    slw 4, 4, 23
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB2_49: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 6, 0, 22
; AIX32-NEXT:    nand 7, 3, 6
; AIX32-NEXT:    andc 8, 6, 4
; AIX32-NEXT:    and 7, 7, 4
; AIX32-NEXT:    or 7, 7, 8
; AIX32-NEXT:    stwcx. 7, 0, 22
; AIX32-NEXT:    bne 0, L..BB2_49
; AIX32-NEXT:  # %bb.50: # %entry
; AIX32-NEXT:    srw 3, 6, 23
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    clrlwi 3, 3, 24
; AIX32-NEXT:    nand 4, 3, 5
; AIX32-NEXT:    lbz 3, 0(26)
; AIX32-NEXT:    li 5, 255
; AIX32-NEXT:    stb 4, 0(24)
; AIX32-NEXT:    slw 5, 5, 21
; AIX32-NEXT:    slw 4, 3, 21
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB2_51: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 6, 0, 19
; AIX32-NEXT:    nand 7, 4, 6
; AIX32-NEXT:    andc 8, 6, 5
; AIX32-NEXT:    and 7, 7, 5
; AIX32-NEXT:    or 7, 7, 8
; AIX32-NEXT:    stwcx. 7, 0, 19
; AIX32-NEXT:    bne 0, L..BB2_51
; AIX32-NEXT:  # %bb.52: # %entry
; AIX32-NEXT:    srw 4, 6, 21
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    clrlwi 4, 4, 24
; AIX32-NEXT:    nand 3, 4, 3
; AIX32-NEXT:    li 4, 0
; AIX32-NEXT:    stb 3, 0(26)
; AIX32-NEXT:    clrlwi 3, 3, 24
; AIX32-NEXT:    ori 5, 4, 65535
; AIX32-NEXT:    slw 4, 3, 18
; AIX32-NEXT:    slw 5, 5, 18
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB2_53: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 6, 0, 17
; AIX32-NEXT:    nand 7, 4, 6
; AIX32-NEXT:    andc 8, 6, 5
; AIX32-NEXT:    and 7, 7, 5
; AIX32-NEXT:    or 7, 7, 8
; AIX32-NEXT:    stwcx. 7, 0, 17
; AIX32-NEXT:    bne 0, L..BB2_53
; AIX32-NEXT:  # %bb.54: # %entry
; AIX32-NEXT:    srw 4, 6, 18
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    li 5, 0
; AIX32-NEXT:    clrlwi 4, 4, 16
; AIX32-NEXT:    ori 5, 5, 65535
; AIX32-NEXT:    nand 4, 4, 3
; AIX32-NEXT:    lbz 3, 0(26)
; AIX32-NEXT:    slw 5, 5, 15
; AIX32-NEXT:    sth 4, 0(27)
; AIX32-NEXT:    slw 4, 3, 15
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB2_55: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 6, 0, 14
; AIX32-NEXT:    nand 7, 4, 6
; AIX32-NEXT:    andc 8, 6, 5
; AIX32-NEXT:    and 7, 7, 5
; AIX32-NEXT:    or 7, 7, 8
; AIX32-NEXT:    stwcx. 7, 0, 14
; AIX32-NEXT:    bne 0, L..BB2_55
; AIX32-NEXT:  # %bb.56: # %entry
; AIX32-NEXT:    srw 4, 6, 15
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    clrlwi 4, 4, 16
; AIX32-NEXT:    nand 3, 4, 3
; AIX32-NEXT:    sth 3, 0(20)
; AIX32-NEXT:    lbz 3, 0(26)
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB2_57: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 4, 0, 13
; AIX32-NEXT:    nand 4, 3, 4
; AIX32-NEXT:    stwcx. 4, 0, 13
; AIX32-NEXT:    bne 0, L..BB2_57
; AIX32-NEXT:  # %bb.58: # %entry
; AIX32-NEXT:    stw 24, 56(1) # 4-byte Folded Spill
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    stw 4, 0(13)
; AIX32-NEXT:    lbz 3, 0(26)
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB2_59: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 4, 0, 16
; AIX32-NEXT:    nand 7, 3, 4
; AIX32-NEXT:    stwcx. 7, 0, 16
; AIX32-NEXT:    bne 0, L..BB2_59
; AIX32-NEXT:  # %bb.60: # %entry
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    mr 3, 31
; AIX32-NEXT:    li 4, 0
; AIX32-NEXT:    li 6, 5
; AIX32-NEXT:    lbz 29, 0(26)
; AIX32-NEXT:    stw 7, 0(16)
; AIX32-NEXT:    mr 5, 29
; AIX32-NEXT:    bl .__atomic_fetch_nand_8[PR]
; AIX32-NEXT:    nop
; AIX32-NEXT:    lbz 28, 0(26)
; AIX32-NEXT:    nand 7, 4, 29
; AIX32-NEXT:    mr 3, 30
; AIX32-NEXT:    li 4, 0
; AIX32-NEXT:    li 6, 5
; AIX32-NEXT:    stw 7, 4(31)
; AIX32-NEXT:    mr 5, 28
; AIX32-NEXT:    stw 25, 0(31)
; AIX32-NEXT:    bl .__atomic_fetch_nand_8[PR]
; AIX32-NEXT:    nop
; AIX32-NEXT:    lwz 29, L..C8(2) # @u128
; AIX32-NEXT:    nand 3, 4, 28
; AIX32-NEXT:    lbz 24, 0(26)
; AIX32-NEXT:    addi 28, 1, 80
; AIX32-NEXT:    addi 27, 1, 64
; AIX32-NEXT:    stw 3, 4(30)
; AIX32-NEXT:    stw 25, 0(30)
; AIX32-NEXT:    lwz 3, 12(29)
; AIX32-NEXT:    lwz 4, 8(29)
; AIX32-NEXT:    lwz 5, 4(29)
; AIX32-NEXT:    lwz 6, 0(29)
; AIX32-NEXT:    .align 4
; AIX32-NEXT:  L..BB2_61: # %atomicrmw.start
; AIX32-NEXT:    #
; AIX32-NEXT:    and 7, 3, 24
; AIX32-NEXT:    stw 3, 92(1)
; AIX32-NEXT:    li 8, 5
; AIX32-NEXT:    xor 3, 7, 25
; AIX32-NEXT:    stw 6, 80(1)
; AIX32-NEXT:    mr 6, 27
; AIX32-NEXT:    stw 5, 84(1)
; AIX32-NEXT:    stw 4, 88(1)
; AIX32-NEXT:    stw 3, 76(1)
; AIX32-NEXT:    li 3, 16
; AIX32-NEXT:    mr 4, 29
; AIX32-NEXT:    mr 5, 28
; AIX32-NEXT:    li 7, 5
; AIX32-NEXT:    stw 25, 72(1)
; AIX32-NEXT:    stw 25, 68(1)
; AIX32-NEXT:    stw 25, 64(1)
; AIX32-NEXT:    bl .__atomic_compare_exchange[PR]
; AIX32-NEXT:    nop
; AIX32-NEXT:    cmplwi 3, 0
; AIX32-NEXT:    lwz 3, 92(1)
; AIX32-NEXT:    lwz 4, 88(1)
; AIX32-NEXT:    lwz 5, 84(1)
; AIX32-NEXT:    lwz 6, 80(1)
; AIX32-NEXT:    beq 0, L..BB2_61
; AIX32-NEXT:  # %bb.62: # %atomicrmw.end
; AIX32-NEXT:    lwz 28, L..C9(2) # @s128
; AIX32-NEXT:    and 3, 3, 24
; AIX32-NEXT:    lbz 24, 0(26)
; AIX32-NEXT:    stw 25, 0(29)
; AIX32-NEXT:    xor 3, 3, 25
; AIX32-NEXT:    stw 25, 4(29)
; AIX32-NEXT:    addi 27, 1, 64
; AIX32-NEXT:    stw 3, 12(29)
; AIX32-NEXT:    stw 25, 8(29)
; AIX32-NEXT:    lwz 3, 12(28)
; AIX32-NEXT:    lwz 4, 8(28)
; AIX32-NEXT:    addi 29, 1, 80
; AIX32-NEXT:    lwz 5, 4(28)
; AIX32-NEXT:    lwz 6, 0(28)
; AIX32-NEXT:    .align 4
; AIX32-NEXT:  L..BB2_63: # %atomicrmw.start2
; AIX32-NEXT:    #
; AIX32-NEXT:    and 7, 3, 24
; AIX32-NEXT:    stw 3, 92(1)
; AIX32-NEXT:    li 8, 5
; AIX32-NEXT:    xor 3, 7, 25
; AIX32-NEXT:    stw 6, 80(1)
; AIX32-NEXT:    mr 6, 27
; AIX32-NEXT:    stw 5, 84(1)
; AIX32-NEXT:    stw 4, 88(1)
; AIX32-NEXT:    stw 3, 76(1)
; AIX32-NEXT:    li 3, 16
; AIX32-NEXT:    mr 4, 28
; AIX32-NEXT:    mr 5, 29
; AIX32-NEXT:    li 7, 5
; AIX32-NEXT:    stw 25, 72(1)
; AIX32-NEXT:    stw 25, 68(1)
; AIX32-NEXT:    stw 25, 64(1)
; AIX32-NEXT:    bl .__atomic_compare_exchange[PR]
; AIX32-NEXT:    nop
; AIX32-NEXT:    cmplwi 3, 0
; AIX32-NEXT:    lwz 3, 92(1)
; AIX32-NEXT:    lwz 4, 88(1)
; AIX32-NEXT:    lwz 5, 84(1)
; AIX32-NEXT:    lwz 6, 80(1)
; AIX32-NEXT:    beq 0, L..BB2_63
; AIX32-NEXT:  # %bb.64: # %atomicrmw.end1
; AIX32-NEXT:    and 3, 3, 24
; AIX32-NEXT:    li 5, 255
; AIX32-NEXT:    xor 4, 3, 25
; AIX32-NEXT:    lbz 3, 0(26)
; AIX32-NEXT:    stw 25, 0(28)
; AIX32-NEXT:    stw 25, 4(28)
; AIX32-NEXT:    stw 25, 8(28)
; AIX32-NEXT:    stw 4, 12(28)
; AIX32-NEXT:    slw 4, 3, 23
; AIX32-NEXT:    slw 5, 5, 23
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB2_65: # %atomicrmw.end1
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 6, 0, 22
; AIX32-NEXT:    and 7, 4, 6
; AIX32-NEXT:    andc 8, 6, 5
; AIX32-NEXT:    and 7, 7, 5
; AIX32-NEXT:    or 7, 7, 8
; AIX32-NEXT:    stwcx. 7, 0, 22
; AIX32-NEXT:    bne 0, L..BB2_65
; AIX32-NEXT:  # %bb.66: # %atomicrmw.end1
; AIX32-NEXT:    srw 4, 6, 23
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    clrlwi 4, 4, 24
; AIX32-NEXT:    lwz 5, 56(1) # 4-byte Folded Reload
; AIX32-NEXT:    and 4, 4, 3
; AIX32-NEXT:    lbz 3, 0(26)
; AIX32-NEXT:    stb 4, 0(5)
; AIX32-NEXT:    li 5, 255
; AIX32-NEXT:    sync
; AIX32-NEXT:    slw 4, 3, 21
; AIX32-NEXT:    slw 5, 5, 21
; AIX32-NEXT:    lwz 9, 60(1) # 4-byte Folded Reload
; AIX32-NEXT:  L..BB2_67: # %atomicrmw.end1
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 6, 0, 19
; AIX32-NEXT:    and 7, 4, 6
; AIX32-NEXT:    andc 8, 6, 5
; AIX32-NEXT:    and 7, 7, 5
; AIX32-NEXT:    or 7, 7, 8
; AIX32-NEXT:    stwcx. 7, 0, 19
; AIX32-NEXT:    bne 0, L..BB2_67
; AIX32-NEXT:  # %bb.68: # %atomicrmw.end1
; AIX32-NEXT:    srw 4, 6, 21
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    clrlwi 4, 4, 24
; AIX32-NEXT:    and 3, 4, 3
; AIX32-NEXT:    li 4, 0
; AIX32-NEXT:    ori 5, 4, 65535
; AIX32-NEXT:    stb 3, 0(26)
; AIX32-NEXT:    slw 4, 3, 18
; AIX32-NEXT:    slw 5, 5, 18
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB2_69: # %atomicrmw.end1
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 6, 0, 17
; AIX32-NEXT:    and 7, 4, 6
; AIX32-NEXT:    andc 8, 6, 5
; AIX32-NEXT:    and 7, 7, 5
; AIX32-NEXT:    or 7, 7, 8
; AIX32-NEXT:    stwcx. 7, 0, 17
; AIX32-NEXT:    bne 0, L..BB2_69
; AIX32-NEXT:  # %bb.70: # %atomicrmw.end1
; AIX32-NEXT:    srw 4, 6, 18
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    li 5, 0
; AIX32-NEXT:    clrlwi 4, 4, 16
; AIX32-NEXT:    ori 5, 5, 65535
; AIX32-NEXT:    and 4, 4, 3
; AIX32-NEXT:    lbz 3, 0(26)
; AIX32-NEXT:    slw 5, 5, 15
; AIX32-NEXT:    sth 4, 0(9)
; AIX32-NEXT:    slw 4, 3, 15
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB2_71: # %atomicrmw.end1
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 6, 0, 14
; AIX32-NEXT:    and 7, 4, 6
; AIX32-NEXT:    andc 8, 6, 5
; AIX32-NEXT:    and 7, 7, 5
; AIX32-NEXT:    or 7, 7, 8
; AIX32-NEXT:    stwcx. 7, 0, 14
; AIX32-NEXT:    bne 0, L..BB2_71
; AIX32-NEXT:  # %bb.72: # %atomicrmw.end1
; AIX32-NEXT:    srw 4, 6, 15
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    clrlwi 4, 4, 16
; AIX32-NEXT:    and 3, 4, 3
; AIX32-NEXT:    sth 3, 0(20)
; AIX32-NEXT:    lbz 3, 0(26)
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB2_73: # %atomicrmw.end1
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 4, 0, 13
; AIX32-NEXT:    and 4, 3, 4
; AIX32-NEXT:    stwcx. 4, 0, 13
; AIX32-NEXT:    bne 0, L..BB2_73
; AIX32-NEXT:  # %bb.74: # %atomicrmw.end1
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    stw 4, 0(13)
; AIX32-NEXT:    lbz 3, 0(26)
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB2_75: # %atomicrmw.end1
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 4, 0, 16
; AIX32-NEXT:    and 7, 3, 4
; AIX32-NEXT:    stwcx. 7, 0, 16
; AIX32-NEXT:    bne 0, L..BB2_75
; AIX32-NEXT:  # %bb.76: # %atomicrmw.end1
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    mr 3, 31
; AIX32-NEXT:    li 4, 0
; AIX32-NEXT:    li 6, 5
; AIX32-NEXT:    li 27, 0
; AIX32-NEXT:    lbz 29, 0(26)
; AIX32-NEXT:    stw 7, 0(16)
; AIX32-NEXT:    mr 5, 29
; AIX32-NEXT:    bl .__atomic_fetch_and_8[PR]
; AIX32-NEXT:    nop
; AIX32-NEXT:    lbz 28, 0(26)
; AIX32-NEXT:    and 7, 4, 29
; AIX32-NEXT:    mr 3, 30
; AIX32-NEXT:    li 4, 0
; AIX32-NEXT:    li 6, 5
; AIX32-NEXT:    stw 7, 4(31)
; AIX32-NEXT:    mr 5, 28
; AIX32-NEXT:    stw 27, 0(31)
; AIX32-NEXT:    bl .__atomic_fetch_and_8[PR]
; AIX32-NEXT:    nop
; AIX32-NEXT:    and 3, 4, 28
; AIX32-NEXT:    stw 27, 0(30)
; AIX32-NEXT:    lwz 31, 172(1) # 4-byte Folded Reload
; AIX32-NEXT:    stw 3, 4(30)
; AIX32-NEXT:    lwz 30, 168(1) # 4-byte Folded Reload
; AIX32-NEXT:    lwz 29, 164(1) # 4-byte Folded Reload
; AIX32-NEXT:    lwz 28, 160(1) # 4-byte Folded Reload
; AIX32-NEXT:    lwz 27, 156(1) # 4-byte Folded Reload
; AIX32-NEXT:    lwz 26, 152(1) # 4-byte Folded Reload
; AIX32-NEXT:    lwz 25, 148(1) # 4-byte Folded Reload
; AIX32-NEXT:    lwz 24, 144(1) # 4-byte Folded Reload
; AIX32-NEXT:    lwz 23, 140(1) # 4-byte Folded Reload
; AIX32-NEXT:    lwz 22, 136(1) # 4-byte Folded Reload
; AIX32-NEXT:    lwz 21, 132(1) # 4-byte Folded Reload
; AIX32-NEXT:    lwz 20, 128(1) # 4-byte Folded Reload
; AIX32-NEXT:    lwz 19, 124(1) # 4-byte Folded Reload
; AIX32-NEXT:    lwz 18, 120(1) # 4-byte Folded Reload
; AIX32-NEXT:    lwz 17, 116(1) # 4-byte Folded Reload
; AIX32-NEXT:    lwz 16, 112(1) # 4-byte Folded Reload
; AIX32-NEXT:    lwz 15, 108(1) # 4-byte Folded Reload
; AIX32-NEXT:    lwz 14, 104(1) # 4-byte Folded Reload
; AIX32-NEXT:    lwz 13, 100(1) # 4-byte Folded Reload
; AIX32-NEXT:    addi 1, 1, 176
; AIX32-NEXT:    lwz 0, 8(1)
; AIX32-NEXT:    mtlr 0
; AIX32-NEXT:    blr
entry:
  %0 = load i8, ptr @uc, align 1
  %1 = atomicrmw add ptr @sc, i8 %0 seq_cst, align 1
  %2 = add i8 %1, %0
  store i8 %2, ptr @sc, align 1
  %3 = load i8, ptr @uc, align 1
  %4 = atomicrmw add ptr @uc, i8 %3 seq_cst, align 1
  %5 = add i8 %4, %3
  store i8 %5, ptr @uc, align 1
  %conv = zext i8 %5 to i16
  %6 = atomicrmw add ptr @ss, i16 %conv seq_cst, align 2
  %7 = add i16 %6, %conv
  store i16 %7, ptr @ss, align 2
  %8 = load i8, ptr @uc, align 1
  %conv1 = zext i8 %8 to i16
  %9 = atomicrmw add ptr @us, i16 %conv1 seq_cst, align 2
  %10 = add i16 %9, %conv1
  store i16 %10, ptr @us, align 2
  %11 = load i8, ptr @uc, align 1
  %conv2 = zext i8 %11 to i32
  %12 = atomicrmw add ptr @si, i32 %conv2 seq_cst, align 4
  %13 = add i32 %12, %conv2
  store i32 %13, ptr @si, align 4
  %14 = load i8, ptr @uc, align 1
  %conv3 = zext i8 %14 to i32
  %15 = atomicrmw add ptr @ui, i32 %conv3 seq_cst, align 4
  %16 = add i32 %15, %conv3
  store i32 %16, ptr @ui, align 4
  %17 = load i8, ptr @uc, align 1
  %conv4 = zext i8 %17 to i64
  %18 = atomicrmw add ptr @sll, i64 %conv4 seq_cst, align 8
  %19 = add i64 %18, %conv4
  store i64 %19, ptr @sll, align 8
  %20 = load i8, ptr @uc, align 1
  %conv5 = zext i8 %20 to i64
  %21 = atomicrmw add ptr @ull, i64 %conv5 seq_cst, align 8
  %22 = add i64 %21, %conv5
  store i64 %22, ptr @ull, align 8
  %23 = load i8, ptr @uc, align 1
  %24 = atomicrmw sub ptr @sc, i8 %23 seq_cst, align 1
  %25 = sub i8 %24, %23
  store i8 %25, ptr @sc, align 1
  %26 = load i8, ptr @uc, align 1
  %27 = atomicrmw sub ptr @uc, i8 %26 seq_cst, align 1
  %28 = sub i8 %27, %26
  store i8 %28, ptr @uc, align 1
  %conv6 = zext i8 %28 to i16
  %29 = atomicrmw sub ptr @ss, i16 %conv6 seq_cst, align 2
  %30 = sub i16 %29, %conv6
  store i16 %30, ptr @ss, align 2
  %31 = load i8, ptr @uc, align 1
  %conv7 = zext i8 %31 to i16
  %32 = atomicrmw sub ptr @us, i16 %conv7 seq_cst, align 2
  %33 = sub i16 %32, %conv7
  store i16 %33, ptr @us, align 2
  %34 = load i8, ptr @uc, align 1
  %conv8 = zext i8 %34 to i32
  %35 = atomicrmw sub ptr @si, i32 %conv8 seq_cst, align 4
  %36 = sub i32 %35, %conv8
  store i32 %36, ptr @si, align 4
  %37 = load i8, ptr @uc, align 1
  %conv9 = zext i8 %37 to i32
  %38 = atomicrmw sub ptr @ui, i32 %conv9 seq_cst, align 4
  %39 = sub i32 %38, %conv9
  store i32 %39, ptr @ui, align 4
  %40 = load i8, ptr @uc, align 1
  %conv10 = zext i8 %40 to i64
  %41 = atomicrmw sub ptr @sll, i64 %conv10 seq_cst, align 8
  %42 = sub i64 %41, %conv10
  store i64 %42, ptr @sll, align 8
  %43 = load i8, ptr @uc, align 1
  %conv11 = zext i8 %43 to i64
  %44 = atomicrmw sub ptr @ull, i64 %conv11 seq_cst, align 8
  %45 = sub i64 %44, %conv11
  store i64 %45, ptr @ull, align 8
  %46 = load i8, ptr @uc, align 1
  %47 = atomicrmw or ptr @sc, i8 %46 seq_cst, align 1
  %48 = or i8 %47, %46
  store i8 %48, ptr @sc, align 1
  %49 = load i8, ptr @uc, align 1
  %50 = atomicrmw or ptr @uc, i8 %49 seq_cst, align 1
  %51 = or i8 %50, %49
  store i8 %51, ptr @uc, align 1
  %conv12 = zext i8 %51 to i16
  %52 = atomicrmw or ptr @ss, i16 %conv12 seq_cst, align 2
  %53 = or i16 %52, %conv12
  store i16 %53, ptr @ss, align 2
  %54 = load i8, ptr @uc, align 1
  %conv13 = zext i8 %54 to i16
  %55 = atomicrmw or ptr @us, i16 %conv13 seq_cst, align 2
  %56 = or i16 %55, %conv13
  store i16 %56, ptr @us, align 2
  %57 = load i8, ptr @uc, align 1
  %conv14 = zext i8 %57 to i32
  %58 = atomicrmw or ptr @si, i32 %conv14 seq_cst, align 4
  %59 = or i32 %58, %conv14
  store i32 %59, ptr @si, align 4
  %60 = load i8, ptr @uc, align 1
  %conv15 = zext i8 %60 to i32
  %61 = atomicrmw or ptr @ui, i32 %conv15 seq_cst, align 4
  %62 = or i32 %61, %conv15
  store i32 %62, ptr @ui, align 4
  %63 = load i8, ptr @uc, align 1
  %conv16 = zext i8 %63 to i64
  %64 = atomicrmw or ptr @sll, i64 %conv16 seq_cst, align 8
  %65 = or i64 %64, %conv16
  store i64 %65, ptr @sll, align 8
  %66 = load i8, ptr @uc, align 1
  %conv17 = zext i8 %66 to i64
  %67 = atomicrmw or ptr @ull, i64 %conv17 seq_cst, align 8
  %68 = or i64 %67, %conv17
  store i64 %68, ptr @ull, align 8
  %69 = load i8, ptr @uc, align 1
  %70 = atomicrmw xor ptr @sc, i8 %69 seq_cst, align 1
  %71 = xor i8 %70, %69
  store i8 %71, ptr @sc, align 1
  %72 = load i8, ptr @uc, align 1
  %73 = atomicrmw xor ptr @uc, i8 %72 seq_cst, align 1
  %74 = xor i8 %73, %72
  store i8 %74, ptr @uc, align 1
  %conv18 = zext i8 %74 to i16
  %75 = atomicrmw xor ptr @ss, i16 %conv18 seq_cst, align 2
  %76 = xor i16 %75, %conv18
  store i16 %76, ptr @ss, align 2
  %77 = load i8, ptr @uc, align 1
  %conv19 = zext i8 %77 to i16
  %78 = atomicrmw xor ptr @us, i16 %conv19 seq_cst, align 2
  %79 = xor i16 %78, %conv19
  store i16 %79, ptr @us, align 2
  %80 = load i8, ptr @uc, align 1
  %conv20 = zext i8 %80 to i32
  %81 = atomicrmw xor ptr @si, i32 %conv20 seq_cst, align 4
  %82 = xor i32 %81, %conv20
  store i32 %82, ptr @si, align 4
  %83 = load i8, ptr @uc, align 1
  %conv21 = zext i8 %83 to i32
  %84 = atomicrmw xor ptr @ui, i32 %conv21 seq_cst, align 4
  %85 = xor i32 %84, %conv21
  store i32 %85, ptr @ui, align 4
  %86 = load i8, ptr @uc, align 1
  %conv22 = zext i8 %86 to i64
  %87 = atomicrmw xor ptr @sll, i64 %conv22 seq_cst, align 8
  %88 = xor i64 %87, %conv22
  store i64 %88, ptr @sll, align 8
  %89 = load i8, ptr @uc, align 1
  %conv23 = zext i8 %89 to i64
  %90 = atomicrmw xor ptr @ull, i64 %conv23 seq_cst, align 8
  %91 = xor i64 %90, %conv23
  store i64 %91, ptr @ull, align 8
  %92 = load i8, ptr @uc, align 1
  %93 = atomicrmw nand ptr @sc, i8 %92 seq_cst, align 1
  %94 = and i8 %93, %92
  %95 = xor i8 %94, -1
  store i8 %95, ptr @sc, align 1
  %96 = load i8, ptr @uc, align 1
  %97 = atomicrmw nand ptr @uc, i8 %96 seq_cst, align 1
  %98 = and i8 %97, %96
  %99 = xor i8 %98, -1
  store i8 %99, ptr @uc, align 1
  %conv24 = zext i8 %99 to i16
  %100 = atomicrmw nand ptr @ss, i16 %conv24 seq_cst, align 2
  %101 = and i16 %100, %conv24
  %102 = xor i16 %101, -1
  store i16 %102, ptr @ss, align 2
  %103 = load i8, ptr @uc, align 1
  %conv25 = zext i8 %103 to i16
  %104 = atomicrmw nand ptr @us, i16 %conv25 seq_cst, align 2
  %105 = and i16 %104, %conv25
  %106 = xor i16 %105, -1
  store i16 %106, ptr @us, align 2
  %107 = load i8, ptr @uc, align 1
  %conv26 = zext i8 %107 to i32
  %108 = atomicrmw nand ptr @si, i32 %conv26 seq_cst, align 4
  %109 = and i32 %108, %conv26
  %110 = xor i32 %109, -1
  store i32 %110, ptr @si, align 4
  %111 = load i8, ptr @uc, align 1
  %conv27 = zext i8 %111 to i32
  %112 = atomicrmw nand ptr @ui, i32 %conv27 seq_cst, align 4
  %113 = and i32 %112, %conv27
  %114 = xor i32 %113, -1
  store i32 %114, ptr @ui, align 4
  %115 = load i8, ptr @uc, align 1
  %conv28 = zext i8 %115 to i64
  %116 = atomicrmw nand ptr @sll, i64 %conv28 seq_cst, align 8
  %117 = and i64 %116, %conv28
  %118 = xor i64 %117, -1
  store i64 %118, ptr @sll, align 8
  %119 = load i8, ptr @uc, align 1
  %conv29 = zext i8 %119 to i64
  %120 = atomicrmw nand ptr @ull, i64 %conv29 seq_cst, align 8
  %121 = and i64 %120, %conv29
  %122 = xor i64 %121, -1
  store i64 %122, ptr @ull, align 8
  %123 = load i8, ptr @uc, align 1
  %conv30 = zext i8 %123 to i128
  %124 = atomicrmw nand ptr @u128, i128 %conv30 seq_cst, align 16
  %125 = and i128 %124, %conv30
  %126 = xor i128 %125, -1
  store i128 %126, ptr @u128, align 16
  %127 = load i8, ptr @uc, align 1
  %conv31 = zext i8 %127 to i128
  %128 = atomicrmw nand ptr @s128, i128 %conv31 seq_cst, align 16
  %129 = and i128 %128, %conv31
  %130 = xor i128 %129, -1
  store i128 %130, ptr @s128, align 16
  %131 = load i8, ptr @uc, align 1
  %132 = atomicrmw and ptr @sc, i8 %131 seq_cst, align 1
  %133 = and i8 %132, %131
  store i8 %133, ptr @sc, align 1
  %134 = load i8, ptr @uc, align 1
  %135 = atomicrmw and ptr @uc, i8 %134 seq_cst, align 1
  %136 = and i8 %135, %134
  store i8 %136, ptr @uc, align 1
  %conv32 = zext i8 %136 to i16
  %137 = atomicrmw and ptr @ss, i16 %conv32 seq_cst, align 2
  %138 = and i16 %137, %conv32
  store i16 %138, ptr @ss, align 2
  %139 = load i8, ptr @uc, align 1
  %conv33 = zext i8 %139 to i16
  %140 = atomicrmw and ptr @us, i16 %conv33 seq_cst, align 2
  %141 = and i16 %140, %conv33
  store i16 %141, ptr @us, align 2
  %142 = load i8, ptr @uc, align 1
  %conv34 = zext i8 %142 to i32
  %143 = atomicrmw and ptr @si, i32 %conv34 seq_cst, align 4
  %144 = and i32 %143, %conv34
  store i32 %144, ptr @si, align 4
  %145 = load i8, ptr @uc, align 1
  %conv35 = zext i8 %145 to i32
  %146 = atomicrmw and ptr @ui, i32 %conv35 seq_cst, align 4
  %147 = and i32 %146, %conv35
  store i32 %147, ptr @ui, align 4
  %148 = load i8, ptr @uc, align 1
  %conv36 = zext i8 %148 to i64
  %149 = atomicrmw and ptr @sll, i64 %conv36 seq_cst, align 8
  %150 = and i64 %149, %conv36
  store i64 %150, ptr @sll, align 8
  %151 = load i8, ptr @uc, align 1
  %conv37 = zext i8 %151 to i64
  %152 = atomicrmw and ptr @ull, i64 %conv37 seq_cst, align 8
  %153 = and i64 %152, %conv37
  store i64 %153, ptr @ull, align 8
  ret void
}

define dso_local void @test_compare_and_swap() local_unnamed_addr #0 {
; CHECK-LABEL: test_compare_and_swap:
; CHECK:       # %bb.0: # %entry
; CHECK-NEXT:    addis 3, 2, uc@toc@ha
; CHECK-NEXT:    addis 4, 2, sc@toc@ha
; CHECK-NEXT:    std 27, -40(1) # 8-byte Folded Spill
; CHECK-NEXT:    std 28, -32(1) # 8-byte Folded Spill
; CHECK-NEXT:    std 29, -24(1) # 8-byte Folded Spill
; CHECK-NEXT:    std 30, -16(1) # 8-byte Folded Spill
; CHECK-NEXT:    addi 6, 3, uc@toc@l
; CHECK-NEXT:    addi 0, 4, sc@toc@l
; CHECK-NEXT:    lbz 5, uc@toc@l(3)
; CHECK-NEXT:    lbz 8, sc@toc@l(4)
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB3_1: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lbarx 7, 0, 0
; CHECK-NEXT:    cmpw 7, 5
; CHECK-NEXT:    bne 0, .LBB3_3
; CHECK-NEXT:  # %bb.2: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    stbcx. 8, 0, 0
; CHECK-NEXT:    bne 0, .LBB3_1
; CHECK-NEXT:  .LBB3_3: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    stb 7, sc@toc@l(4)
; CHECK-NEXT:    lbz 8, uc@toc@l(3)
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB3_4: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lbarx 5, 0, 6
; CHECK-NEXT:    cmpw 5, 8
; CHECK-NEXT:    bne 0, .LBB3_6
; CHECK-NEXT:  # %bb.5: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    stbcx. 7, 0, 6
; CHECK-NEXT:    bne 0, .LBB3_4
; CHECK-NEXT:  .LBB3_6: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    addis 7, 2, ss@toc@ha
; CHECK-NEXT:    stb 5, uc@toc@l(3)
; CHECK-NEXT:    lbz 8, sc@toc@l(4)
; CHECK-NEXT:    addi 12, 7, ss@toc@l
; CHECK-NEXT:    sync
; CHECK-NEXT:    extsb 8, 8
; CHECK-NEXT:  .LBB3_7: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lharx 9, 0, 12
; CHECK-NEXT:    cmpw 9, 5
; CHECK-NEXT:    bne 0, .LBB3_9
; CHECK-NEXT:  # %bb.8: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    sthcx. 8, 0, 12
; CHECK-NEXT:    bne 0, .LBB3_7
; CHECK-NEXT:  .LBB3_9: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    sth 9, ss@toc@l(7)
; CHECK-NEXT:    addis 7, 2, us@toc@ha
; CHECK-NEXT:    lbz 8, sc@toc@l(4)
; CHECK-NEXT:    lbz 5, uc@toc@l(3)
; CHECK-NEXT:    addi 11, 7, us@toc@l
; CHECK-NEXT:    sync
; CHECK-NEXT:    extsb 8, 8
; CHECK-NEXT:  .LBB3_10: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lharx 9, 0, 11
; CHECK-NEXT:    cmpw 9, 5
; CHECK-NEXT:    bne 0, .LBB3_12
; CHECK-NEXT:  # %bb.11: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    sthcx. 8, 0, 11
; CHECK-NEXT:    bne 0, .LBB3_10
; CHECK-NEXT:  .LBB3_12: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    sth 9, us@toc@l(7)
; CHECK-NEXT:    addis 7, 2, si@toc@ha
; CHECK-NEXT:    lbz 8, sc@toc@l(4)
; CHECK-NEXT:    lbz 5, uc@toc@l(3)
; CHECK-NEXT:    addi 10, 7, si@toc@l
; CHECK-NEXT:    sync
; CHECK-NEXT:    extsb 8, 8
; CHECK-NEXT:  .LBB3_13: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lwarx 9, 0, 10
; CHECK-NEXT:    cmpw 9, 5
; CHECK-NEXT:    bne 0, .LBB3_15
; CHECK-NEXT:  # %bb.14: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    stwcx. 8, 0, 10
; CHECK-NEXT:    bne 0, .LBB3_13
; CHECK-NEXT:  .LBB3_15: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    stw 9, si@toc@l(7)
; CHECK-NEXT:    addis 5, 2, ui@toc@ha
; CHECK-NEXT:    lbz 8, sc@toc@l(4)
; CHECK-NEXT:    lbz 7, uc@toc@l(3)
; CHECK-NEXT:    addi 9, 5, ui@toc@l
; CHECK-NEXT:    sync
; CHECK-NEXT:    extsb 8, 8
; CHECK-NEXT:  .LBB3_16: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lwarx 30, 0, 9
; CHECK-NEXT:    cmpw 30, 7
; CHECK-NEXT:    bne 0, .LBB3_18
; CHECK-NEXT:  # %bb.17: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    stwcx. 8, 0, 9
; CHECK-NEXT:    bne 0, .LBB3_16
; CHECK-NEXT:  .LBB3_18: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    stw 30, ui@toc@l(5)
; CHECK-NEXT:    addis 30, 2, sll@toc@ha
; CHECK-NEXT:    lbz 8, sc@toc@l(4)
; CHECK-NEXT:    lbz 7, uc@toc@l(3)
; CHECK-NEXT:    sync
; CHECK-NEXT:    extsb 29, 8
; CHECK-NEXT:    addi 8, 30, sll@toc@l
; CHECK-NEXT:  .LBB3_19: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    ldarx 28, 0, 8
; CHECK-NEXT:    cmpd 28, 7
; CHECK-NEXT:    bne 0, .LBB3_21
; CHECK-NEXT:  # %bb.20: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    stdcx. 29, 0, 8
; CHECK-NEXT:    bne 0, .LBB3_19
; CHECK-NEXT:  .LBB3_21: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    std 28, sll@toc@l(30)
; CHECK-NEXT:    addis 29, 2, ull@toc@ha
; CHECK-NEXT:    lbz 7, sc@toc@l(4)
; CHECK-NEXT:    lbz 30, uc@toc@l(3)
; CHECK-NEXT:    sync
; CHECK-NEXT:    extsb 28, 7
; CHECK-NEXT:    addi 7, 29, ull@toc@l
; CHECK-NEXT:  .LBB3_22: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    ldarx 27, 0, 7
; CHECK-NEXT:    cmpd 27, 30
; CHECK-NEXT:    bne 0, .LBB3_24
; CHECK-NEXT:  # %bb.23: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    stdcx. 28, 0, 7
; CHECK-NEXT:    bne 0, .LBB3_22
; CHECK-NEXT:  .LBB3_24: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    std 27, ull@toc@l(29)
; CHECK-NEXT:    lbz 30, uc@toc@l(3)
; CHECK-NEXT:    lbz 29, sc@toc@l(4)
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB3_25: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lbarx 28, 0, 0
; CHECK-NEXT:    cmpw 28, 30
; CHECK-NEXT:    bne 0, .LBB3_27
; CHECK-NEXT:  # %bb.26: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    stbcx. 29, 0, 0
; CHECK-NEXT:    bne 0, .LBB3_25
; CHECK-NEXT:  .LBB3_27: # %entry
; CHECK-NEXT:    xor 0, 28, 30
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    cntlzw 0, 0
; CHECK-NEXT:    lbz 30, sc@toc@l(4)
; CHECK-NEXT:    srwi 0, 0, 5
; CHECK-NEXT:    stw 0, ui@toc@l(5)
; CHECK-NEXT:    lbz 0, uc@toc@l(3)
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB3_28: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lbarx 29, 0, 6
; CHECK-NEXT:    cmpw 29, 0
; CHECK-NEXT:    bne 0, .LBB3_30
; CHECK-NEXT:  # %bb.29: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    stbcx. 30, 0, 6
; CHECK-NEXT:    bne 0, .LBB3_28
; CHECK-NEXT:  .LBB3_30: # %entry
; CHECK-NEXT:    xor 6, 29, 0
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    cntlzw 6, 6
; CHECK-NEXT:    lbz 0, sc@toc@l(4)
; CHECK-NEXT:    srwi 6, 6, 5
; CHECK-NEXT:    stw 6, ui@toc@l(5)
; CHECK-NEXT:    lbz 6, uc@toc@l(3)
; CHECK-NEXT:    extsb 0, 0
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB3_31: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lharx 30, 0, 12
; CHECK-NEXT:    cmpw 30, 6
; CHECK-NEXT:    bne 0, .LBB3_33
; CHECK-NEXT:  # %bb.32: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    sthcx. 0, 0, 12
; CHECK-NEXT:    bne 0, .LBB3_31
; CHECK-NEXT:  .LBB3_33: # %entry
; CHECK-NEXT:    xor 6, 30, 6
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    cntlzw 6, 6
; CHECK-NEXT:    lbz 12, sc@toc@l(4)
; CHECK-NEXT:    srwi 6, 6, 5
; CHECK-NEXT:    stw 6, ui@toc@l(5)
; CHECK-NEXT:    lbz 6, uc@toc@l(3)
; CHECK-NEXT:    extsb 12, 12
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB3_34: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lharx 0, 0, 11
; CHECK-NEXT:    cmpw 0, 6
; CHECK-NEXT:    bne 0, .LBB3_36
; CHECK-NEXT:  # %bb.35: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    sthcx. 12, 0, 11
; CHECK-NEXT:    bne 0, .LBB3_34
; CHECK-NEXT:  .LBB3_36: # %entry
; CHECK-NEXT:    xor 6, 0, 6
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    cntlzw 6, 6
; CHECK-NEXT:    lbz 11, sc@toc@l(4)
; CHECK-NEXT:    srwi 6, 6, 5
; CHECK-NEXT:    stw 6, ui@toc@l(5)
; CHECK-NEXT:    lbz 6, uc@toc@l(3)
; CHECK-NEXT:    extsb 11, 11
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB3_37: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lwarx 12, 0, 10
; CHECK-NEXT:    cmpw 12, 6
; CHECK-NEXT:    bne 0, .LBB3_39
; CHECK-NEXT:  # %bb.38: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    stwcx. 11, 0, 10
; CHECK-NEXT:    bne 0, .LBB3_37
; CHECK-NEXT:  .LBB3_39: # %entry
; CHECK-NEXT:    xor 6, 12, 6
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    cntlzw 6, 6
; CHECK-NEXT:    lbz 10, sc@toc@l(4)
; CHECK-NEXT:    srwi 6, 6, 5
; CHECK-NEXT:    stw 6, ui@toc@l(5)
; CHECK-NEXT:    lbz 6, uc@toc@l(3)
; CHECK-NEXT:    extsb 10, 10
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB3_40: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lwarx 11, 0, 9
; CHECK-NEXT:    cmpw 11, 6
; CHECK-NEXT:    bne 0, .LBB3_42
; CHECK-NEXT:  # %bb.41: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    stwcx. 10, 0, 9
; CHECK-NEXT:    bne 0, .LBB3_40
; CHECK-NEXT:  .LBB3_42: # %entry
; CHECK-NEXT:    xor 6, 11, 6
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    cntlzw 6, 6
; CHECK-NEXT:    lbz 9, sc@toc@l(4)
; CHECK-NEXT:    srwi 6, 6, 5
; CHECK-NEXT:    stw 6, ui@toc@l(5)
; CHECK-NEXT:    lbz 6, uc@toc@l(3)
; CHECK-NEXT:    extsb 9, 9
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB3_43: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    ldarx 10, 0, 8
; CHECK-NEXT:    cmpd 10, 6
; CHECK-NEXT:    bne 0, .LBB3_45
; CHECK-NEXT:  # %bb.44: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    stdcx. 9, 0, 8
; CHECK-NEXT:    bne 0, .LBB3_43
; CHECK-NEXT:  .LBB3_45: # %entry
; CHECK-NEXT:    xor 6, 10, 6
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    cntlzd 6, 6
; CHECK-NEXT:    lbz 4, sc@toc@l(4)
; CHECK-NEXT:    lbz 3, uc@toc@l(3)
; CHECK-NEXT:    rldicl 6, 6, 58, 63
; CHECK-NEXT:    stw 6, ui@toc@l(5)
; CHECK-NEXT:    extsb 4, 4
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB3_46: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    ldarx 6, 0, 7
; CHECK-NEXT:    cmpd 6, 3
; CHECK-NEXT:    bne 0, .LBB3_48
; CHECK-NEXT:  # %bb.47: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    stdcx. 4, 0, 7
; CHECK-NEXT:    bne 0, .LBB3_46
; CHECK-NEXT:  .LBB3_48: # %entry
; CHECK-NEXT:    xor 3, 6, 3
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    cntlzd 3, 3
; CHECK-NEXT:    ld 30, -16(1) # 8-byte Folded Reload
; CHECK-NEXT:    ld 29, -24(1) # 8-byte Folded Reload
; CHECK-NEXT:    ld 28, -32(1) # 8-byte Folded Reload
; CHECK-NEXT:    ld 27, -40(1) # 8-byte Folded Reload
; CHECK-NEXT:    rldicl 3, 3, 58, 63
; CHECK-NEXT:    stw 3, ui@toc@l(5)
; CHECK-NEXT:    blr
;
; AIX32-LABEL: test_compare_and_swap:
; AIX32:       # %bb.0: # %entry
; AIX32-NEXT:    mflr 0
; AIX32-NEXT:    stwu 1, -128(1)
; AIX32-NEXT:    stw 0, 136(1)
; AIX32-NEXT:    stw 28, 112(1) # 4-byte Folded Spill
; AIX32-NEXT:    lwz 28, L..C0(2) # @sc
; AIX32-NEXT:    stw 29, 116(1) # 4-byte Folded Spill
; AIX32-NEXT:    lwz 29, L..C1(2) # @uc
; AIX32-NEXT:    stw 23, 92(1) # 4-byte Folded Spill
; AIX32-NEXT:    stw 17, 68(1) # 4-byte Folded Spill
; AIX32-NEXT:    stw 18, 72(1) # 4-byte Folded Spill
; AIX32-NEXT:    lbz 3, 0(28)
; AIX32-NEXT:    rlwinm 4, 28, 3, 27, 28
; AIX32-NEXT:    stw 19, 76(1) # 4-byte Folded Spill
; AIX32-NEXT:    lbz 5, 0(29)
; AIX32-NEXT:    xori 23, 4, 24
; AIX32-NEXT:    li 4, 255
; AIX32-NEXT:    slw 6, 3, 23
; AIX32-NEXT:    slw 3, 4, 23
; AIX32-NEXT:    slw 5, 5, 23
; AIX32-NEXT:    stw 20, 80(1) # 4-byte Folded Spill
; AIX32-NEXT:    and 4, 6, 3
; AIX32-NEXT:    stw 21, 84(1) # 4-byte Folded Spill
; AIX32-NEXT:    stw 22, 88(1) # 4-byte Folded Spill
; AIX32-NEXT:    stw 24, 96(1) # 4-byte Folded Spill
; AIX32-NEXT:    stw 25, 100(1) # 4-byte Folded Spill
; AIX32-NEXT:    stw 26, 104(1) # 4-byte Folded Spill
; AIX32-NEXT:    stw 27, 108(1) # 4-byte Folded Spill
; AIX32-NEXT:    stw 30, 120(1) # 4-byte Folded Spill
; AIX32-NEXT:    stw 31, 124(1) # 4-byte Folded Spill
; AIX32-NEXT:    rlwinm 19, 28, 0, 0, 29
; AIX32-NEXT:    and 5, 5, 3
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB3_1: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 7, 0, 19
; AIX32-NEXT:    and 6, 7, 3
; AIX32-NEXT:    cmpw 6, 5
; AIX32-NEXT:    bne 0, L..BB3_3
; AIX32-NEXT:  # %bb.2: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    andc 7, 7, 3
; AIX32-NEXT:    or 7, 7, 4
; AIX32-NEXT:    stwcx. 7, 0, 19
; AIX32-NEXT:    bne 0, L..BB3_1
; AIX32-NEXT:  L..BB3_3: # %entry
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    rlwinm 4, 29, 3, 27, 28
; AIX32-NEXT:    srw 3, 6, 23
; AIX32-NEXT:    lbz 5, 0(29)
; AIX32-NEXT:    xori 25, 4, 24
; AIX32-NEXT:    stb 3, 0(28)
; AIX32-NEXT:    slw 4, 3, 25
; AIX32-NEXT:    li 3, 255
; AIX32-NEXT:    sync
; AIX32-NEXT:    slw 6, 5, 25
; AIX32-NEXT:    slw 3, 3, 25
; AIX32-NEXT:    rlwinm 22, 29, 0, 0, 29
; AIX32-NEXT:    and 5, 4, 3
; AIX32-NEXT:    and 6, 6, 3
; AIX32-NEXT:  L..BB3_4: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 7, 0, 22
; AIX32-NEXT:    and 4, 7, 3
; AIX32-NEXT:    cmpw 4, 6
; AIX32-NEXT:    bne 0, L..BB3_6
; AIX32-NEXT:  # %bb.5: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    andc 7, 7, 3
; AIX32-NEXT:    or 7, 7, 5
; AIX32-NEXT:    stwcx. 7, 0, 22
; AIX32-NEXT:    bne 0, L..BB3_4
; AIX32-NEXT:  L..BB3_6: # %entry
; AIX32-NEXT:    lwz 3, L..C2(2) # @ss
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    li 7, 0
; AIX32-NEXT:    srw 4, 4, 25
; AIX32-NEXT:    lbz 5, 0(28)
; AIX32-NEXT:    stb 4, 0(29)
; AIX32-NEXT:    sync
; AIX32-NEXT:    rlwinm 6, 3, 3, 27, 27
; AIX32-NEXT:    extsb 5, 5
; AIX32-NEXT:    xori 24, 6, 16
; AIX32-NEXT:    ori 6, 7, 65535
; AIX32-NEXT:    slw 5, 5, 24
; AIX32-NEXT:    slw 7, 4, 24
; AIX32-NEXT:    slw 4, 6, 24
; AIX32-NEXT:    rlwinm 20, 3, 0, 0, 29
; AIX32-NEXT:    and 6, 5, 4
; AIX32-NEXT:    and 7, 7, 4
; AIX32-NEXT:  L..BB3_7: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 8, 0, 20
; AIX32-NEXT:    and 5, 8, 4
; AIX32-NEXT:    cmpw 5, 7
; AIX32-NEXT:    bne 0, L..BB3_9
; AIX32-NEXT:  # %bb.8: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    andc 8, 8, 4
; AIX32-NEXT:    or 8, 8, 6
; AIX32-NEXT:    stwcx. 8, 0, 20
; AIX32-NEXT:    bne 0, L..BB3_7
; AIX32-NEXT:  L..BB3_9: # %entry
; AIX32-NEXT:    lwz 4, L..C3(2) # @us
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    srw 5, 5, 24
; AIX32-NEXT:    lbz 6, 0(28)
; AIX32-NEXT:    sth 5, 0(3)
; AIX32-NEXT:    li 5, 0
; AIX32-NEXT:    lbz 7, 0(29)
; AIX32-NEXT:    sync
; AIX32-NEXT:    rlwinm 3, 4, 3, 27, 27
; AIX32-NEXT:    extsb 6, 6
; AIX32-NEXT:    xori 21, 3, 16
; AIX32-NEXT:    ori 3, 5, 65535
; AIX32-NEXT:    slw 5, 6, 21
; AIX32-NEXT:    slw 7, 7, 21
; AIX32-NEXT:    slw 3, 3, 21
; AIX32-NEXT:    rlwinm 18, 4, 0, 0, 29
; AIX32-NEXT:    and 6, 5, 3
; AIX32-NEXT:    and 7, 7, 3
; AIX32-NEXT:  L..BB3_10: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 8, 0, 18
; AIX32-NEXT:    and 5, 8, 3
; AIX32-NEXT:    cmpw 5, 7
; AIX32-NEXT:    bne 0, L..BB3_12
; AIX32-NEXT:  # %bb.11: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    andc 8, 8, 3
; AIX32-NEXT:    or 8, 8, 6
; AIX32-NEXT:    stwcx. 8, 0, 18
; AIX32-NEXT:    bne 0, L..BB3_10
; AIX32-NEXT:  L..BB3_12: # %entry
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    srw 3, 5, 21
; AIX32-NEXT:    lwz 17, L..C4(2) # @si
; AIX32-NEXT:    lbz 5, 0(28)
; AIX32-NEXT:    sth 3, 0(4)
; AIX32-NEXT:    lbz 3, 0(29)
; AIX32-NEXT:    sync
; AIX32-NEXT:    extsb 4, 5
; AIX32-NEXT:  L..BB3_13: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 5, 0, 17
; AIX32-NEXT:    cmpw 5, 3
; AIX32-NEXT:    bne 0, L..BB3_15
; AIX32-NEXT:  # %bb.14: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    stwcx. 4, 0, 17
; AIX32-NEXT:    bne 0, L..BB3_13
; AIX32-NEXT:  L..BB3_15: # %entry
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    lwz 27, L..C5(2) # @ui
; AIX32-NEXT:    stw 5, 0(17)
; AIX32-NEXT:    lbz 4, 0(28)
; AIX32-NEXT:    lbz 3, 0(29)
; AIX32-NEXT:    sync
; AIX32-NEXT:    extsb 4, 4
; AIX32-NEXT:  L..BB3_16: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 5, 0, 27
; AIX32-NEXT:    cmpw 5, 3
; AIX32-NEXT:    bne 0, L..BB3_18
; AIX32-NEXT:  # %bb.17: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    stwcx. 4, 0, 27
; AIX32-NEXT:    bne 0, L..BB3_16
; AIX32-NEXT:  L..BB3_18: # %entry
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    lwz 31, L..C6(2) # @sll
; AIX32-NEXT:    stw 5, 0(27)
; AIX32-NEXT:    li 26, 0
; AIX32-NEXT:    li 7, 5
; AIX32-NEXT:    lbz 4, 0(28)
; AIX32-NEXT:    lbz 3, 0(29)
; AIX32-NEXT:    li 8, 5
; AIX32-NEXT:    stw 26, 56(1)
; AIX32-NEXT:    extsb 6, 4
; AIX32-NEXT:    stw 3, 60(1)
; AIX32-NEXT:    addi 4, 1, 56
; AIX32-NEXT:    srawi 5, 6, 31
; AIX32-NEXT:    mr 3, 31
; AIX32-NEXT:    bl .__atomic_compare_exchange_8[PR]
; AIX32-NEXT:    nop
; AIX32-NEXT:    lbz 5, 0(28)
; AIX32-NEXT:    lwz 30, L..C7(2) # @ull
; AIX32-NEXT:    lwz 3, 60(1)
; AIX32-NEXT:    li 7, 5
; AIX32-NEXT:    li 8, 5
; AIX32-NEXT:    lwz 4, 56(1)
; AIX32-NEXT:    lbz 9, 0(29)
; AIX32-NEXT:    extsb 6, 5
; AIX32-NEXT:    stw 3, 4(31)
; AIX32-NEXT:    stw 4, 0(31)
; AIX32-NEXT:    srawi 5, 6, 31
; AIX32-NEXT:    addi 4, 1, 56
; AIX32-NEXT:    mr 3, 30
; AIX32-NEXT:    stw 9, 60(1)
; AIX32-NEXT:    stw 26, 56(1)
; AIX32-NEXT:    bl .__atomic_compare_exchange_8[PR]
; AIX32-NEXT:    nop
; AIX32-NEXT:    lwz 3, 60(1)
; AIX32-NEXT:    lwz 5, 56(1)
; AIX32-NEXT:    lbz 6, 0(28)
; AIX32-NEXT:    lbz 4, 0(29)
; AIX32-NEXT:    stw 3, 4(30)
; AIX32-NEXT:    li 3, 255
; AIX32-NEXT:    stw 5, 0(30)
; AIX32-NEXT:    slw 5, 6, 23
; AIX32-NEXT:    slw 6, 4, 23
; AIX32-NEXT:    slw 3, 3, 23
; AIX32-NEXT:    sync
; AIX32-NEXT:    and 5, 5, 3
; AIX32-NEXT:    and 6, 6, 3
; AIX32-NEXT:  L..BB3_19: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 8, 0, 19
; AIX32-NEXT:    and 7, 8, 3
; AIX32-NEXT:    cmpw 7, 6
; AIX32-NEXT:    bne 0, L..BB3_21
; AIX32-NEXT:  # %bb.20: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    andc 8, 8, 3
; AIX32-NEXT:    or 8, 8, 5
; AIX32-NEXT:    stwcx. 8, 0, 19
; AIX32-NEXT:    bne 0, L..BB3_19
; AIX32-NEXT:  L..BB3_21: # %entry
; AIX32-NEXT:    srw 5, 7, 23
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    li 3, 1
; AIX32-NEXT:    li 7, 255
; AIX32-NEXT:    cmpw 5, 4
; AIX32-NEXT:    lbz 5, 0(28)
; AIX32-NEXT:    lbz 4, 0(29)
; AIX32-NEXT:    iseleq 6, 3, 26
; AIX32-NEXT:    stw 6, 0(27)
; AIX32-NEXT:    slw 5, 5, 25
; AIX32-NEXT:    slw 8, 4, 25
; AIX32-NEXT:    slw 6, 7, 25
; AIX32-NEXT:    sync
; AIX32-NEXT:    and 7, 5, 6
; AIX32-NEXT:    and 8, 8, 6
; AIX32-NEXT:  L..BB3_22: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 9, 0, 22
; AIX32-NEXT:    and 5, 9, 6
; AIX32-NEXT:    cmpw 5, 8
; AIX32-NEXT:    bne 0, L..BB3_24
; AIX32-NEXT:  # %bb.23: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    andc 9, 9, 6
; AIX32-NEXT:    or 9, 9, 7
; AIX32-NEXT:    stwcx. 9, 0, 22
; AIX32-NEXT:    bne 0, L..BB3_22
; AIX32-NEXT:  L..BB3_24: # %entry
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    srw 5, 5, 25
; AIX32-NEXT:    lbz 6, 0(28)
; AIX32-NEXT:    cmpw 5, 4
; AIX32-NEXT:    li 5, 0
; AIX32-NEXT:    lbz 4, 0(29)
; AIX32-NEXT:    iseleq 7, 3, 26
; AIX32-NEXT:    ori 5, 5, 65535
; AIX32-NEXT:    extsb 6, 6
; AIX32-NEXT:    stw 7, 0(27)
; AIX32-NEXT:    slw 7, 6, 24
; AIX32-NEXT:    slw 8, 4, 24
; AIX32-NEXT:    sync
; AIX32-NEXT:    slw 6, 5, 24
; AIX32-NEXT:    and 7, 7, 6
; AIX32-NEXT:    and 8, 8, 6
; AIX32-NEXT:  L..BB3_25: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 9, 0, 20
; AIX32-NEXT:    and 5, 9, 6
; AIX32-NEXT:    cmpw 5, 8
; AIX32-NEXT:    bne 0, L..BB3_27
; AIX32-NEXT:  # %bb.26: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    andc 9, 9, 6
; AIX32-NEXT:    or 9, 9, 7
; AIX32-NEXT:    stwcx. 9, 0, 20
; AIX32-NEXT:    bne 0, L..BB3_25
; AIX32-NEXT:  L..BB3_27: # %entry
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    srw 5, 5, 24
; AIX32-NEXT:    lbz 6, 0(28)
; AIX32-NEXT:    cmpw 5, 4
; AIX32-NEXT:    li 5, 0
; AIX32-NEXT:    lbz 4, 0(29)
; AIX32-NEXT:    iseleq 7, 3, 26
; AIX32-NEXT:    ori 5, 5, 65535
; AIX32-NEXT:    extsb 6, 6
; AIX32-NEXT:    stw 7, 0(27)
; AIX32-NEXT:    slw 6, 6, 21
; AIX32-NEXT:    slw 7, 4, 21
; AIX32-NEXT:    sync
; AIX32-NEXT:    slw 5, 5, 21
; AIX32-NEXT:    and 6, 6, 5
; AIX32-NEXT:    and 7, 7, 5
; AIX32-NEXT:  L..BB3_28: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 9, 0, 18
; AIX32-NEXT:    and 8, 9, 5
; AIX32-NEXT:    cmpw 8, 7
; AIX32-NEXT:    bne 0, L..BB3_30
; AIX32-NEXT:  # %bb.29: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    andc 9, 9, 5
; AIX32-NEXT:    or 9, 9, 6
; AIX32-NEXT:    stwcx. 9, 0, 18
; AIX32-NEXT:    bne 0, L..BB3_28
; AIX32-NEXT:  L..BB3_30: # %entry
; AIX32-NEXT:    srw 5, 8, 21
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    cmpw 5, 4
; AIX32-NEXT:    lbz 5, 0(28)
; AIX32-NEXT:    iseleq 4, 3, 26
; AIX32-NEXT:    stw 4, 0(27)
; AIX32-NEXT:    lbz 4, 0(29)
; AIX32-NEXT:    extsb 5, 5
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB3_31: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 6, 0, 17
; AIX32-NEXT:    cmpw 1, 6, 4
; AIX32-NEXT:    bne 1, L..BB3_33
; AIX32-NEXT:  # %bb.32: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    stwcx. 5, 0, 17
; AIX32-NEXT:    bne 0, L..BB3_31
; AIX32-NEXT:  L..BB3_33: # %entry
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    isel 4, 3, 26, 6
; AIX32-NEXT:    lbz 5, 0(28)
; AIX32-NEXT:    stw 4, 0(27)
; AIX32-NEXT:    lbz 4, 0(29)
; AIX32-NEXT:    sync
; AIX32-NEXT:    extsb 5, 5
; AIX32-NEXT:  L..BB3_34: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 6, 0, 27
; AIX32-NEXT:    cmpw 1, 6, 4
; AIX32-NEXT:    bne 1, L..BB3_36
; AIX32-NEXT:  # %bb.35: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    stwcx. 5, 0, 27
; AIX32-NEXT:    bne 0, L..BB3_34
; AIX32-NEXT:  L..BB3_36: # %entry
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    isel 3, 3, 26, 6
; AIX32-NEXT:    li 7, 5
; AIX32-NEXT:    li 8, 5
; AIX32-NEXT:    lbz 4, 0(28)
; AIX32-NEXT:    lbz 9, 0(29)
; AIX32-NEXT:    stw 3, 0(27)
; AIX32-NEXT:    mr 3, 31
; AIX32-NEXT:    extsb 6, 4
; AIX32-NEXT:    addi 4, 1, 56
; AIX32-NEXT:    srawi 5, 6, 31
; AIX32-NEXT:    stw 9, 60(1)
; AIX32-NEXT:    stw 26, 56(1)
; AIX32-NEXT:    bl .__atomic_compare_exchange_8[PR]
; AIX32-NEXT:    nop
; AIX32-NEXT:    lbz 4, 0(28)
; AIX32-NEXT:    lbz 9, 0(29)
; AIX32-NEXT:    li 7, 5
; AIX32-NEXT:    li 8, 5
; AIX32-NEXT:    stw 3, 0(27)
; AIX32-NEXT:    mr 3, 30
; AIX32-NEXT:    extsb 6, 4
; AIX32-NEXT:    addi 4, 1, 56
; AIX32-NEXT:    srawi 5, 6, 31
; AIX32-NEXT:    stw 9, 60(1)
; AIX32-NEXT:    stw 26, 56(1)
; AIX32-NEXT:    bl .__atomic_compare_exchange_8[PR]
; AIX32-NEXT:    nop
; AIX32-NEXT:    stw 3, 0(27)
; AIX32-NEXT:    lwz 31, 124(1) # 4-byte Folded Reload
; AIX32-NEXT:    lwz 30, 120(1) # 4-byte Folded Reload
; AIX32-NEXT:    lwz 29, 116(1) # 4-byte Folded Reload
; AIX32-NEXT:    lwz 28, 112(1) # 4-byte Folded Reload
; AIX32-NEXT:    lwz 27, 108(1) # 4-byte Folded Reload
; AIX32-NEXT:    lwz 26, 104(1) # 4-byte Folded Reload
; AIX32-NEXT:    lwz 25, 100(1) # 4-byte Folded Reload
; AIX32-NEXT:    lwz 24, 96(1) # 4-byte Folded Reload
; AIX32-NEXT:    lwz 23, 92(1) # 4-byte Folded Reload
; AIX32-NEXT:    lwz 22, 88(1) # 4-byte Folded Reload
; AIX32-NEXT:    lwz 21, 84(1) # 4-byte Folded Reload
; AIX32-NEXT:    lwz 20, 80(1) # 4-byte Folded Reload
; AIX32-NEXT:    lwz 19, 76(1) # 4-byte Folded Reload
; AIX32-NEXT:    lwz 18, 72(1) # 4-byte Folded Reload
; AIX32-NEXT:    lwz 17, 68(1) # 4-byte Folded Reload
; AIX32-NEXT:    addi 1, 1, 128
; AIX32-NEXT:    lwz 0, 8(1)
; AIX32-NEXT:    mtlr 0
; AIX32-NEXT:    blr
entry:
  %0 = load i8, ptr @uc, align 1
  %1 = load i8, ptr @sc, align 1
  %2 = cmpxchg ptr @sc, i8 %0, i8 %1 seq_cst seq_cst, align 1
  %3 = extractvalue { i8, i1 } %2, 0
  store i8 %3, ptr @sc, align 1
  %4 = load i8, ptr @uc, align 1
  %5 = cmpxchg ptr @uc, i8 %4, i8 %3 seq_cst seq_cst, align 1
  %6 = extractvalue { i8, i1 } %5, 0
  store i8 %6, ptr @uc, align 1
  %conv = zext i8 %6 to i16
  %7 = load i8, ptr @sc, align 1
  %conv1 = sext i8 %7 to i16
  %8 = cmpxchg ptr @ss, i16 %conv, i16 %conv1 seq_cst seq_cst, align 2
  %9 = extractvalue { i16, i1 } %8, 0
  store i16 %9, ptr @ss, align 2
  %10 = load i8, ptr @uc, align 1
  %conv2 = zext i8 %10 to i16
  %11 = load i8, ptr @sc, align 1
  %conv3 = sext i8 %11 to i16
  %12 = cmpxchg ptr @us, i16 %conv2, i16 %conv3 seq_cst seq_cst, align 2
  %13 = extractvalue { i16, i1 } %12, 0
  store i16 %13, ptr @us, align 2
  %14 = load i8, ptr @uc, align 1
  %conv4 = zext i8 %14 to i32
  %15 = load i8, ptr @sc, align 1
  %conv5 = sext i8 %15 to i32
  %16 = cmpxchg ptr @si, i32 %conv4, i32 %conv5 seq_cst seq_cst, align 4
  %17 = extractvalue { i32, i1 } %16, 0
  store i32 %17, ptr @si, align 4
  %18 = load i8, ptr @uc, align 1
  %conv6 = zext i8 %18 to i32
  %19 = load i8, ptr @sc, align 1
  %conv7 = sext i8 %19 to i32
  %20 = cmpxchg ptr @ui, i32 %conv6, i32 %conv7 seq_cst seq_cst, align 4
  %21 = extractvalue { i32, i1 } %20, 0
  store i32 %21, ptr @ui, align 4
  %22 = load i8, ptr @uc, align 1
  %conv8 = zext i8 %22 to i64
  %23 = load i8, ptr @sc, align 1
  %conv9 = sext i8 %23 to i64
  %24 = cmpxchg ptr @sll, i64 %conv8, i64 %conv9 seq_cst seq_cst, align 8
  %25 = extractvalue { i64, i1 } %24, 0
  store i64 %25, ptr @sll, align 8
  %26 = load i8, ptr @uc, align 1
  %conv10 = zext i8 %26 to i64
  %27 = load i8, ptr @sc, align 1
  %conv11 = sext i8 %27 to i64
  %28 = cmpxchg ptr @ull, i64 %conv10, i64 %conv11 seq_cst seq_cst, align 8
  %29 = extractvalue { i64, i1 } %28, 0
  store i64 %29, ptr @ull, align 8
  %30 = load i8, ptr @uc, align 1
  %31 = load i8, ptr @sc, align 1
  %32 = cmpxchg ptr @sc, i8 %30, i8 %31 seq_cst seq_cst, align 1
  %33 = extractvalue { i8, i1 } %32, 1
  %conv12 = zext i1 %33 to i32
  store i32 %conv12, ptr @ui, align 4
  %34 = load i8, ptr @uc, align 1
  %35 = load i8, ptr @sc, align 1
  %36 = cmpxchg ptr @uc, i8 %34, i8 %35 seq_cst seq_cst, align 1
  %37 = extractvalue { i8, i1 } %36, 1
  %conv13 = zext i1 %37 to i32
  store i32 %conv13, ptr @ui, align 4
  %38 = load i8, ptr @uc, align 1
  %conv14 = zext i8 %38 to i16
  %39 = load i8, ptr @sc, align 1
  %conv15 = sext i8 %39 to i16
  %40 = cmpxchg ptr @ss, i16 %conv14, i16 %conv15 seq_cst seq_cst, align 2
  %41 = extractvalue { i16, i1 } %40, 1
  %conv16 = zext i1 %41 to i32
  store i32 %conv16, ptr @ui, align 4
  %42 = load i8, ptr @uc, align 1
  %conv17 = zext i8 %42 to i16
  %43 = load i8, ptr @sc, align 1
  %conv18 = sext i8 %43 to i16
  %44 = cmpxchg ptr @us, i16 %conv17, i16 %conv18 seq_cst seq_cst, align 2
  %45 = extractvalue { i16, i1 } %44, 1
  %conv19 = zext i1 %45 to i32
  store i32 %conv19, ptr @ui, align 4
  %46 = load i8, ptr @uc, align 1
  %conv20 = zext i8 %46 to i32
  %47 = load i8, ptr @sc, align 1
  %conv21 = sext i8 %47 to i32
  %48 = cmpxchg ptr @si, i32 %conv20, i32 %conv21 seq_cst seq_cst, align 4
  %49 = extractvalue { i32, i1 } %48, 1
  %conv22 = zext i1 %49 to i32
  store i32 %conv22, ptr @ui, align 4
  %50 = load i8, ptr @uc, align 1
  %conv23 = zext i8 %50 to i32
  %51 = load i8, ptr @sc, align 1
  %conv24 = sext i8 %51 to i32
  %52 = cmpxchg ptr @ui, i32 %conv23, i32 %conv24 seq_cst seq_cst, align 4
  %53 = extractvalue { i32, i1 } %52, 1
  %conv25 = zext i1 %53 to i32
  store i32 %conv25, ptr @ui, align 4
  %54 = load i8, ptr @uc, align 1
  %conv26 = zext i8 %54 to i64
  %55 = load i8, ptr @sc, align 1
  %conv27 = sext i8 %55 to i64
  %56 = cmpxchg ptr @sll, i64 %conv26, i64 %conv27 seq_cst seq_cst, align 8
  %57 = extractvalue { i64, i1 } %56, 1
  %conv28 = zext i1 %57 to i32
  store i32 %conv28, ptr @ui, align 4
  %58 = load i8, ptr @uc, align 1
  %conv29 = zext i8 %58 to i64
  %59 = load i8, ptr @sc, align 1
  %conv30 = sext i8 %59 to i64
  %60 = cmpxchg ptr @ull, i64 %conv29, i64 %conv30 seq_cst seq_cst, align 8
  %61 = extractvalue { i64, i1 } %60, 1
  %conv31 = zext i1 %61 to i32
  store i32 %conv31, ptr @ui, align 4
  ret void
}

define dso_local void @test_lock() local_unnamed_addr #0 {
; CHECK-LABEL: test_lock:
; CHECK:       # %bb.0: # %entry
; CHECK-NEXT:    addis 3, 2, sc@toc@ha
; CHECK-NEXT:    li 7, 1
; CHECK-NEXT:    sync
; CHECK-NEXT:    addi 4, 3, sc@toc@l
; CHECK-NEXT:  .LBB4_1: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lbarx 5, 0, 4
; CHECK-NEXT:    stbcx. 7, 0, 4
; CHECK-NEXT:    bne 0, .LBB4_1
; CHECK-NEXT:  # %bb.2: # %entry
; CHECK-NEXT:    addis 4, 2, uc@toc@ha
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    stb 5, sc@toc@l(3)
; CHECK-NEXT:    addi 6, 4, uc@toc@l
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB4_3: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lbarx 5, 0, 6
; CHECK-NEXT:    stbcx. 7, 0, 6
; CHECK-NEXT:    bne 0, .LBB4_3
; CHECK-NEXT:  # %bb.4: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    stb 5, uc@toc@l(4)
; CHECK-NEXT:    addis 5, 2, ss@toc@ha
; CHECK-NEXT:    addi 8, 5, ss@toc@l
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB4_5: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lharx 6, 0, 8
; CHECK-NEXT:    sthcx. 7, 0, 8
; CHECK-NEXT:    bne 0, .LBB4_5
; CHECK-NEXT:  # %bb.6: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    sth 6, ss@toc@l(5)
; CHECK-NEXT:    addis 6, 2, us@toc@ha
; CHECK-NEXT:    addi 9, 6, us@toc@l
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB4_7: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lharx 8, 0, 9
; CHECK-NEXT:    sthcx. 7, 0, 9
; CHECK-NEXT:    bne 0, .LBB4_7
; CHECK-NEXT:  # %bb.8: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    sth 8, us@toc@l(6)
; CHECK-NEXT:    addis 8, 2, si@toc@ha
; CHECK-NEXT:    addi 10, 8, si@toc@l
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB4_9: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lwarx 9, 0, 10
; CHECK-NEXT:    stwcx. 7, 0, 10
; CHECK-NEXT:    bne 0, .LBB4_9
; CHECK-NEXT:  # %bb.10: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    stw 9, si@toc@l(8)
; CHECK-NEXT:    addis 9, 2, ui@toc@ha
; CHECK-NEXT:    addi 11, 9, ui@toc@l
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB4_11: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lwarx 10, 0, 11
; CHECK-NEXT:    stwcx. 7, 0, 11
; CHECK-NEXT:    bne 0, .LBB4_11
; CHECK-NEXT:  # %bb.12: # %entry
; CHECK-NEXT:    addis 7, 2, sll@toc@ha
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    stw 10, ui@toc@l(9)
; CHECK-NEXT:    li 11, 1
; CHECK-NEXT:    addi 10, 7, sll@toc@l
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB4_13: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    ldarx 12, 0, 10
; CHECK-NEXT:    stdcx. 11, 0, 10
; CHECK-NEXT:    bne 0, .LBB4_13
; CHECK-NEXT:  # %bb.14: # %entry
; CHECK-NEXT:    addis 10, 2, ull@toc@ha
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    std 12, sll@toc@l(7)
; CHECK-NEXT:    addi 0, 10, ull@toc@l
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB4_15: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    ldarx 12, 0, 0
; CHECK-NEXT:    stdcx. 11, 0, 0
; CHECK-NEXT:    bne 0, .LBB4_15
; CHECK-NEXT:  # %bb.16: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    std 12, ull@toc@l(10)
; CHECK-NEXT:    li 11, 0
; CHECK-NEXT:    sync
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    stb 11, sc@toc@l(3)
; CHECK-NEXT:    li 3, 0
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    stb 11, uc@toc@l(4)
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    sth 11, ss@toc@l(5)
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    sth 11, us@toc@l(6)
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    stw 11, si@toc@l(8)
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    stw 11, ui@toc@l(9)
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    std 3, sll@toc@l(7)
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    std 3, ull@toc@l(10)
; CHECK-NEXT:    blr
;
; AIX32-LABEL: test_lock:
; AIX32:       # %bb.0: # %entry
; AIX32-NEXT:    mflr 0
; AIX32-NEXT:    stwu 1, -96(1)
; AIX32-NEXT:    stw 0, 104(1)
; AIX32-NEXT:    stw 29, 84(1) # 4-byte Folded Spill
; AIX32-NEXT:    lwz 29, L..C0(2) # @sc
; AIX32-NEXT:    li 3, 1
; AIX32-NEXT:    li 5, 255
; AIX32-NEXT:    stw 23, 60(1) # 4-byte Folded Spill
; AIX32-NEXT:    stw 24, 64(1) # 4-byte Folded Spill
; AIX32-NEXT:    rlwinm 4, 29, 3, 27, 28
; AIX32-NEXT:    stw 25, 68(1) # 4-byte Folded Spill
; AIX32-NEXT:    xori 4, 4, 24
; AIX32-NEXT:    stw 26, 72(1) # 4-byte Folded Spill
; AIX32-NEXT:    slw 8, 3, 4
; AIX32-NEXT:    slw 6, 5, 4
; AIX32-NEXT:    stw 27, 76(1) # 4-byte Folded Spill
; AIX32-NEXT:    stw 28, 80(1) # 4-byte Folded Spill
; AIX32-NEXT:    stw 30, 88(1) # 4-byte Folded Spill
; AIX32-NEXT:    stw 31, 92(1) # 4-byte Folded Spill
; AIX32-NEXT:    rlwinm 7, 29, 0, 0, 29
; AIX32-NEXT:    and 8, 8, 6
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB4_1: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 5, 0, 7
; AIX32-NEXT:    andc 9, 5, 6
; AIX32-NEXT:    or 9, 8, 9
; AIX32-NEXT:    stwcx. 9, 0, 7
; AIX32-NEXT:    bne 0, L..BB4_1
; AIX32-NEXT:  # %bb.2: # %entry
; AIX32-NEXT:    lwz 28, L..C1(2) # @uc
; AIX32-NEXT:    srw 4, 5, 4
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    li 5, 255
; AIX32-NEXT:    clrlwi 4, 4, 24
; AIX32-NEXT:    stb 4, 0(29)
; AIX32-NEXT:    rlwinm 4, 28, 3, 27, 28
; AIX32-NEXT:    rlwinm 6, 28, 0, 0, 29
; AIX32-NEXT:    sync
; AIX32-NEXT:    xori 4, 4, 24
; AIX32-NEXT:    slw 7, 3, 4
; AIX32-NEXT:    slw 5, 5, 4
; AIX32-NEXT:    and 7, 7, 5
; AIX32-NEXT:  L..BB4_3: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 8, 0, 6
; AIX32-NEXT:    andc 9, 8, 5
; AIX32-NEXT:    or 9, 7, 9
; AIX32-NEXT:    stwcx. 9, 0, 6
; AIX32-NEXT:    bne 0, L..BB4_3
; AIX32-NEXT:  # %bb.4: # %entry
; AIX32-NEXT:    lwz 27, L..C2(2) # @ss
; AIX32-NEXT:    srw 4, 8, 4
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    li 5, 0
; AIX32-NEXT:    clrlwi 4, 4, 24
; AIX32-NEXT:    ori 5, 5, 65535
; AIX32-NEXT:    stb 4, 0(28)
; AIX32-NEXT:    rlwinm 4, 27, 3, 27, 27
; AIX32-NEXT:    rlwinm 6, 27, 0, 0, 29
; AIX32-NEXT:    sync
; AIX32-NEXT:    xori 4, 4, 16
; AIX32-NEXT:    slw 7, 3, 4
; AIX32-NEXT:    slw 5, 5, 4
; AIX32-NEXT:    and 7, 7, 5
; AIX32-NEXT:  L..BB4_5: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 8, 0, 6
; AIX32-NEXT:    andc 9, 8, 5
; AIX32-NEXT:    or 9, 7, 9
; AIX32-NEXT:    stwcx. 9, 0, 6
; AIX32-NEXT:    bne 0, L..BB4_5
; AIX32-NEXT:  # %bb.6: # %entry
; AIX32-NEXT:    lwz 26, L..C3(2) # @us
; AIX32-NEXT:    srw 4, 8, 4
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    li 5, 0
; AIX32-NEXT:    clrlwi 4, 4, 16
; AIX32-NEXT:    ori 5, 5, 65535
; AIX32-NEXT:    sth 4, 0(27)
; AIX32-NEXT:    rlwinm 4, 26, 3, 27, 27
; AIX32-NEXT:    rlwinm 6, 26, 0, 0, 29
; AIX32-NEXT:    sync
; AIX32-NEXT:    xori 4, 4, 16
; AIX32-NEXT:    slw 7, 3, 4
; AIX32-NEXT:    slw 5, 5, 4
; AIX32-NEXT:    and 7, 7, 5
; AIX32-NEXT:  L..BB4_7: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 8, 0, 6
; AIX32-NEXT:    andc 9, 8, 5
; AIX32-NEXT:    or 9, 7, 9
; AIX32-NEXT:    stwcx. 9, 0, 6
; AIX32-NEXT:    bne 0, L..BB4_7
; AIX32-NEXT:  # %bb.8: # %entry
; AIX32-NEXT:    srw 4, 8, 4
; AIX32-NEXT:    lwz 25, L..C4(2) # @si
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    clrlwi 4, 4, 16
; AIX32-NEXT:    sth 4, 0(26)
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB4_9: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 4, 0, 25
; AIX32-NEXT:    stwcx. 3, 0, 25
; AIX32-NEXT:    bne 0, L..BB4_9
; AIX32-NEXT:  # %bb.10: # %entry
; AIX32-NEXT:    lwz 24, L..C5(2) # @ui
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    stw 4, 0(25)
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB4_11: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 4, 0, 24
; AIX32-NEXT:    stwcx. 3, 0, 24
; AIX32-NEXT:    bne 0, L..BB4_11
; AIX32-NEXT:  # %bb.12: # %entry
; AIX32-NEXT:    lwz 31, L..C6(2) # @sll
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    stw 4, 0(24)
; AIX32-NEXT:    li 4, 0
; AIX32-NEXT:    li 5, 1
; AIX32-NEXT:    li 6, 5
; AIX32-NEXT:    li 23, 0
; AIX32-NEXT:    mr 3, 31
; AIX32-NEXT:    bl .__atomic_exchange_8[PR]
; AIX32-NEXT:    nop
; AIX32-NEXT:    lwz 30, L..C7(2) # @ull
; AIX32-NEXT:    mr 7, 3
; AIX32-NEXT:    mr 8, 4
; AIX32-NEXT:    li 4, 0
; AIX32-NEXT:    li 5, 1
; AIX32-NEXT:    li 6, 5
; AIX32-NEXT:    stw 8, 4(31)
; AIX32-NEXT:    stw 7, 0(31)
; AIX32-NEXT:    mr 3, 30
; AIX32-NEXT:    bl .__atomic_exchange_8[PR]
; AIX32-NEXT:    nop
; AIX32-NEXT:    stw 4, 4(30)
; AIX32-NEXT:    stw 3, 0(30)
; AIX32-NEXT:    sync
; AIX32-NEXT:    mr 3, 31
; AIX32-NEXT:    li 4, 0
; AIX32-NEXT:    li 5, 0
; AIX32-NEXT:    li 6, 3
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    stb 23, 0(29)
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    stb 23, 0(28)
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    sth 23, 0(27)
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    sth 23, 0(26)
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    stw 23, 0(25)
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    stw 23, 0(24)
; AIX32-NEXT:    bl .__atomic_store_8[PR]
; AIX32-NEXT:    nop
; AIX32-NEXT:    mr 3, 30
; AIX32-NEXT:    li 4, 0
; AIX32-NEXT:    li 5, 0
; AIX32-NEXT:    li 6, 3
; AIX32-NEXT:    bl .__atomic_store_8[PR]
; AIX32-NEXT:    nop
; AIX32-NEXT:    lwz 31, 92(1) # 4-byte Folded Reload
; AIX32-NEXT:    lwz 30, 88(1) # 4-byte Folded Reload
; AIX32-NEXT:    lwz 29, 84(1) # 4-byte Folded Reload
; AIX32-NEXT:    lwz 28, 80(1) # 4-byte Folded Reload
; AIX32-NEXT:    lwz 27, 76(1) # 4-byte Folded Reload
; AIX32-NEXT:    lwz 26, 72(1) # 4-byte Folded Reload
; AIX32-NEXT:    lwz 25, 68(1) # 4-byte Folded Reload
; AIX32-NEXT:    lwz 24, 64(1) # 4-byte Folded Reload
; AIX32-NEXT:    lwz 23, 60(1) # 4-byte Folded Reload
; AIX32-NEXT:    addi 1, 1, 96
; AIX32-NEXT:    lwz 0, 8(1)
; AIX32-NEXT:    mtlr 0
; AIX32-NEXT:    blr
entry:
  %0 = atomicrmw xchg ptr @sc, i8 1 seq_cst, align 1
  store i8 %0, ptr @sc, align 1
  %1 = atomicrmw xchg ptr @uc, i8 1 seq_cst, align 1
  store i8 %1, ptr @uc, align 1
  %2 = atomicrmw xchg ptr @ss, i16 1 seq_cst, align 2
  store i16 %2, ptr @ss, align 2
  %3 = atomicrmw xchg ptr @us, i16 1 seq_cst, align 2
  store i16 %3, ptr @us, align 2
  %4 = atomicrmw xchg ptr @si, i32 1 seq_cst, align 4
  store i32 %4, ptr @si, align 4
  %5 = atomicrmw xchg ptr @ui, i32 1 seq_cst, align 4
  store i32 %5, ptr @ui, align 4
  %6 = atomicrmw xchg ptr @sll, i64 1 seq_cst, align 8
  store i64 %6, ptr @sll, align 8
  %7 = atomicrmw xchg ptr @ull, i64 1 seq_cst, align 8
  store i64 %7, ptr @ull, align 8
  fence seq_cst
  store atomic i8 0, ptr @sc release, align 1
  store atomic i8 0, ptr @uc release, align 1
  store atomic i16 0, ptr @ss release, align 2
  store atomic i16 0, ptr @us release, align 2
  store atomic i32 0, ptr @si release, align 4
  store atomic i32 0, ptr @ui release, align 4
  store atomic i64 0, ptr @sll release, align 8
  store atomic i64 0, ptr @ull release, align 8
  ret void
}

define dso_local void @test_atomic() local_unnamed_addr #0 {
; CHECK-LABEL: test_atomic:
; CHECK:       # %bb.0: # %entry
; CHECK-NEXT:    addis 4, 2, ui@toc@ha
; CHECK-NEXT:    li 3, 5
; CHECK-NEXT:    addi 6, 4, ui@toc@l
; CHECK-NEXT:  .LBB5_1: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lwarx 5, 0, 6
; CHECK-NEXT:    cmplwi 5, 5
; CHECK-NEXT:    blt 0, .LBB5_3
; CHECK-NEXT:  # %bb.2: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    stwcx. 3, 0, 6
; CHECK-NEXT:    bne 0, .LBB5_1
; CHECK-NEXT:  .LBB5_3: # %entry
; CHECK-NEXT:    stw 5, ui@toc@l(4)
; CHECK-NEXT:    addis 5, 2, si@toc@ha
; CHECK-NEXT:    addi 7, 5, si@toc@l
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB5_4: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lwarx 8, 0, 7
; CHECK-NEXT:    cmpwi 8, 5
; CHECK-NEXT:    blt 0, .LBB5_6
; CHECK-NEXT:  # %bb.5: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    stwcx. 3, 0, 7
; CHECK-NEXT:    bne 0, .LBB5_4
; CHECK-NEXT:  .LBB5_6: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    stw 8, si@toc@l(5)
; CHECK-NEXT:  .LBB5_7: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lwarx 8, 0, 6
; CHECK-NEXT:    cmplwi 8, 5
; CHECK-NEXT:    bgt 0, .LBB5_9
; CHECK-NEXT:  # %bb.8: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    stwcx. 3, 0, 6
; CHECK-NEXT:    bne 0, .LBB5_7
; CHECK-NEXT:  .LBB5_9: # %entry
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    stw 8, ui@toc@l(4)
; CHECK-NEXT:    lwsync
; CHECK-NEXT:  .LBB5_10: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lwarx 4, 0, 7
; CHECK-NEXT:    cmpwi 4, 5
; CHECK-NEXT:    bgt 0, .LBB5_12
; CHECK-NEXT:  # %bb.11: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    stwcx. 3, 0, 7
; CHECK-NEXT:    bne 0, .LBB5_10
; CHECK-NEXT:  .LBB5_12: # %entry
; CHECK-NEXT:    stw 4, si@toc@l(5)
; CHECK-NEXT:    blr
;
; AIX32-LABEL: test_atomic:
; AIX32:       # %bb.0: # %entry
; AIX32-NEXT:    lwz 4, L..C5(2) # @ui
; AIX32-NEXT:    li 3, 5
; AIX32-NEXT:  L..BB5_1: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 5, 0, 4
; AIX32-NEXT:    cmplwi 5, 5
; AIX32-NEXT:    blt 0, L..BB5_3
; AIX32-NEXT:  # %bb.2: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    stwcx. 3, 0, 4
; AIX32-NEXT:    bne 0, L..BB5_1
; AIX32-NEXT:  L..BB5_3: # %entry
; AIX32-NEXT:    stw 5, 0(4)
; AIX32-NEXT:    lwz 5, L..C4(2) # @si
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB5_4: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 6, 0, 5
; AIX32-NEXT:    cmpwi 6, 5
; AIX32-NEXT:    blt 0, L..BB5_6
; AIX32-NEXT:  # %bb.5: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    stwcx. 3, 0, 5
; AIX32-NEXT:    bne 0, L..BB5_4
; AIX32-NEXT:  L..BB5_6: # %entry
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    stw 6, 0(5)
; AIX32-NEXT:  L..BB5_7: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 6, 0, 4
; AIX32-NEXT:    cmplwi 6, 5
; AIX32-NEXT:    bgt 0, L..BB5_9
; AIX32-NEXT:  # %bb.8: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    stwcx. 3, 0, 4
; AIX32-NEXT:    bne 0, L..BB5_7
; AIX32-NEXT:  L..BB5_9: # %entry
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    stw 6, 0(4)
; AIX32-NEXT:    lwsync
; AIX32-NEXT:  L..BB5_10: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 4, 0, 5
; AIX32-NEXT:    cmpwi 4, 5
; AIX32-NEXT:    bgt 0, L..BB5_12
; AIX32-NEXT:  # %bb.11: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    stwcx. 3, 0, 5
; AIX32-NEXT:    bne 0, L..BB5_10
; AIX32-NEXT:  L..BB5_12: # %entry
; AIX32-NEXT:    stw 4, 0(5)
; AIX32-NEXT:    blr
entry:
  %0 = atomicrmw umin ptr @ui, i32 5 monotonic, align 4
  store i32 %0, ptr @ui, align 4
  %1 = atomicrmw min ptr @si, i32 5 seq_cst, align 4
  store i32 %1, ptr @si, align 4
  %2 = atomicrmw umax ptr @ui, i32 5 acquire, align 4
  store i32 %2, ptr @ui, align 4
  %3 = atomicrmw max ptr @si, i32 5 release, align 4
  store i32 %3, ptr @si, align 4
  ret void
}

define dso_local i64 @cmpswplp(ptr noundef %ptr, ptr nocapture noundef readnone %oldval, i64 noundef %newval) local_unnamed_addr #0 {
; CHECK-LABEL: cmpswplp:
; CHECK:       # %bb.0: # %entry
; CHECK-NEXT:    addi 4, 5, 1
; CHECK-NEXT:  .LBB6_1: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    ldarx 6, 0, 3
; CHECK-NEXT:    cmpd 1, 6, 5
; CHECK-NEXT:    bne 1, .LBB6_3
; CHECK-NEXT:  # %bb.2: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    stdcx. 4, 0, 3
; CHECK-NEXT:    bne 0, .LBB6_1
; CHECK-NEXT:  .LBB6_3: # %entry
; CHECK-NEXT:    li 3, 66
; CHECK-NEXT:    li 4, 55
; CHECK-NEXT:    isel 3, 4, 3, 6
; CHECK-NEXT:    blr
;
; AIX32-LABEL: cmpswplp:
; AIX32:       # %bb.0: # %entry
; AIX32-NEXT:    mflr 0
; AIX32-NEXT:    stwu 1, -64(1)
; AIX32-NEXT:    addic 7, 6, 1
; AIX32-NEXT:    stw 0, 72(1)
; AIX32-NEXT:    addi 4, 1, 56
; AIX32-NEXT:    addze 8, 5
; AIX32-NEXT:    stw 6, 60(1)
; AIX32-NEXT:    mr 6, 7
; AIX32-NEXT:    stw 5, 56(1)
; AIX32-NEXT:    mr 5, 8
; AIX32-NEXT:    li 7, 0
; AIX32-NEXT:    li 8, 0
; AIX32-NEXT:    bl .__atomic_compare_exchange_8[PR]
; AIX32-NEXT:    nop
; AIX32-NEXT:    andi. 3, 3, 1
; AIX32-NEXT:    li 4, 55
; AIX32-NEXT:    li 3, 66
; AIX32-NEXT:    iselgt 4, 4, 3
; AIX32-NEXT:    li 3, 0
; AIX32-NEXT:    addi 1, 1, 64
; AIX32-NEXT:    lwz 0, 8(1)
; AIX32-NEXT:    mtlr 0
; AIX32-NEXT:    blr
entry:
  %add = add nsw i64 %newval, 1
  %0 = cmpxchg weak volatile ptr %ptr, i64 %newval, i64 %add monotonic monotonic, align 8
  %1 = extractvalue { i64, i1 } %0, 1
  %conv = select i1 %1, i64 55, i64 66
  ret i64 %conv
}

define dso_local i64 @atommax8(ptr nocapture noundef %ptr, i64 noundef %val) local_unnamed_addr #0 {
; CHECK-LABEL: atommax8:
; CHECK:       # %bb.0: # %entry
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB7_1: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    ldarx 5, 0, 3
; CHECK-NEXT:    cmpd 1, 5, 4
; CHECK-NEXT:    bgt 1, .LBB7_3
; CHECK-NEXT:  # %bb.2: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    stdcx. 4, 0, 3
; CHECK-NEXT:    bne 0, .LBB7_1
; CHECK-NEXT:  .LBB7_3: # %entry
; CHECK-NEXT:    li 3, 55
; CHECK-NEXT:    li 4, 66
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    isel 3, 4, 3, 5
; CHECK-NEXT:    blr
;
; AIX32-LABEL: atommax8:
; AIX32:       # %bb.0: # %entry
; AIX32-NEXT:    mflr 0
; AIX32-NEXT:    stwu 1, -80(1)
; AIX32-NEXT:    stw 0, 88(1)
; AIX32-NEXT:    stw 28, 64(1) # 4-byte Folded Spill
; AIX32-NEXT:    lwz 9, 4(3)
; AIX32-NEXT:    lwz 10, 0(3)
; AIX32-NEXT:    addi 28, 1, 56
; AIX32-NEXT:    stw 29, 68(1) # 4-byte Folded Spill
; AIX32-NEXT:    stw 30, 72(1) # 4-byte Folded Spill
; AIX32-NEXT:    stw 31, 76(1) # 4-byte Folded Spill
; AIX32-NEXT:    mr 31, 5
; AIX32-NEXT:    mr 29, 3
; AIX32-NEXT:    mr 30, 4
; AIX32-NEXT:    .align 4
; AIX32-NEXT:  L..BB7_1: # %atomicrmw.start
; AIX32-NEXT:    #
; AIX32-NEXT:    cmplw 10, 30
; AIX32-NEXT:    cmpw 1, 10, 30
; AIX32-NEXT:    mr 3, 29
; AIX32-NEXT:    mr 4, 28
; AIX32-NEXT:    crandc 20, 5, 2
; AIX32-NEXT:    cmplw 1, 9, 31
; AIX32-NEXT:    li 7, 5
; AIX32-NEXT:    li 8, 5
; AIX32-NEXT:    crand 21, 2, 5
; AIX32-NEXT:    stw 10, 56(1)
; AIX32-NEXT:    stw 9, 60(1)
; AIX32-NEXT:    cror 20, 21, 20
; AIX32-NEXT:    isel 5, 10, 30, 20
; AIX32-NEXT:    isel 6, 9, 31, 20
; AIX32-NEXT:    bl .__atomic_compare_exchange_8[PR]
; AIX32-NEXT:    nop
; AIX32-NEXT:    lwz 9, 60(1)
; AIX32-NEXT:    lwz 10, 56(1)
; AIX32-NEXT:    cmplwi 3, 0
; AIX32-NEXT:    beq 0, L..BB7_1
; AIX32-NEXT:  # %bb.2: # %atomicrmw.end
; AIX32-NEXT:    cmplw 10, 30
; AIX32-NEXT:    cmpw 1, 10, 30
; AIX32-NEXT:    li 3, 55
; AIX32-NEXT:    li 4, 66
; AIX32-NEXT:    crandc 20, 5, 2
; AIX32-NEXT:    cmplw 1, 9, 31
; AIX32-NEXT:    lwz 31, 76(1) # 4-byte Folded Reload
; AIX32-NEXT:    lwz 30, 72(1) # 4-byte Folded Reload
; AIX32-NEXT:    crand 21, 2, 5
; AIX32-NEXT:    lwz 29, 68(1) # 4-byte Folded Reload
; AIX32-NEXT:    lwz 28, 64(1) # 4-byte Folded Reload
; AIX32-NEXT:    cror 20, 21, 20
; AIX32-NEXT:    isel 4, 4, 3, 20
; AIX32-NEXT:    li 3, 0
; AIX32-NEXT:    addi 1, 1, 80
; AIX32-NEXT:    lwz 0, 8(1)
; AIX32-NEXT:    mtlr 0
; AIX32-NEXT:    blr
entry:
  %0 = atomicrmw max ptr %ptr, i64 %val seq_cst, align 8
  %cmp.not = icmp sgt i64 %0, %val
  %conv = select i1 %cmp.not, i64 66, i64 55
  ret i64 %conv
}

define dso_local signext i32 @atommax4(ptr nocapture noundef %ptr, i32 noundef signext %val) local_unnamed_addr #0 {
; CHECK-LABEL: atommax4:
; CHECK:       # %bb.0: # %entry
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB8_1: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lwarx 5, 0, 3
; CHECK-NEXT:    cmpw 1, 5, 4
; CHECK-NEXT:    bgt 1, .LBB8_3
; CHECK-NEXT:  # %bb.2: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    stwcx. 4, 0, 3
; CHECK-NEXT:    bne 0, .LBB8_1
; CHECK-NEXT:  .LBB8_3: # %entry
; CHECK-NEXT:    li 3, 55
; CHECK-NEXT:    li 4, 66
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    isel 3, 4, 3, 5
; CHECK-NEXT:    blr
;
; AIX32-LABEL: atommax4:
; AIX32:       # %bb.0: # %entry
; AIX32-NEXT:    sync
; AIX32-NEXT:  L..BB8_1: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 5, 0, 3
; AIX32-NEXT:    cmpw 1, 5, 4
; AIX32-NEXT:    bgt 1, L..BB8_3
; AIX32-NEXT:  # %bb.2: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    stwcx. 4, 0, 3
; AIX32-NEXT:    bne 0, L..BB8_1
; AIX32-NEXT:  L..BB8_3: # %entry
; AIX32-NEXT:    li 3, 55
; AIX32-NEXT:    li 4, 66
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    isel 3, 4, 3, 5
; AIX32-NEXT:    blr
entry:
  %0 = atomicrmw max ptr %ptr, i32 %val seq_cst, align 4
  %cmp.not = icmp sgt i32 %0, %val
  %cond = select i1 %cmp.not, i32 66, i32 55
  ret i32 %cond
}

define dso_local signext i16 @atommax2(ptr nocapture noundef %ptr, i16 noundef signext %val) local_unnamed_addr #0 {
; CHECK-LABEL: atommax2:
; CHECK:       # %bb.0: # %entry
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB9_1: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lharx 5, 0, 3
; CHECK-NEXT:    extsh 5, 5
; CHECK-NEXT:    cmpw 1, 5, 4
; CHECK-NEXT:    bgt 1, .LBB9_3
; CHECK-NEXT:  # %bb.2: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    sthcx. 4, 0, 3
; CHECK-NEXT:    bne 0, .LBB9_1
; CHECK-NEXT:  .LBB9_3: # %entry
; CHECK-NEXT:    li 3, 55
; CHECK-NEXT:    li 4, 66
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    isel 3, 4, 3, 5
; CHECK-NEXT:    blr
;
; AIX32-LABEL: atommax2:
; AIX32:       # %bb.0: # %entry
; AIX32-NEXT:    li 6, 0
; AIX32-NEXT:    rlwinm 5, 3, 3, 27, 27
; AIX32-NEXT:    sync
; AIX32-NEXT:    xori 5, 5, 16
; AIX32-NEXT:    ori 6, 6, 65535
; AIX32-NEXT:    slw 7, 4, 5
; AIX32-NEXT:    slw 6, 6, 5
; AIX32-NEXT:    rlwinm 3, 3, 0, 0, 29
; AIX32-NEXT:    and 7, 7, 6
; AIX32-NEXT:  L..BB9_1: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 8, 0, 3
; AIX32-NEXT:    and 9, 8, 6
; AIX32-NEXT:    srw 9, 9, 5
; AIX32-NEXT:    extsh 9, 9
; AIX32-NEXT:    cmpw 9, 4
; AIX32-NEXT:    bgt 0, L..BB9_3
; AIX32-NEXT:  # %bb.2: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    andc 9, 8, 6
; AIX32-NEXT:    or 9, 7, 9
; AIX32-NEXT:    stwcx. 9, 0, 3
; AIX32-NEXT:    bne 0, L..BB9_1
; AIX32-NEXT:  L..BB9_3: # %entry
; AIX32-NEXT:    srw 3, 8, 5
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    clrlwi 3, 3, 16
; AIX32-NEXT:    extsh 3, 3
; AIX32-NEXT:    cmpw 3, 4
; AIX32-NEXT:    li 3, 55
; AIX32-NEXT:    li 4, 66
; AIX32-NEXT:    iselgt 3, 4, 3
; AIX32-NEXT:    blr
entry:
  %0 = atomicrmw max ptr %ptr, i16 %val seq_cst, align 2
  %cmp.not = icmp sgt i16 %0, %val
  %conv3 = select i1 %cmp.not, i16 66, i16 55
  ret i16 %conv3
}

define dso_local zeroext i8 @atommax1(ptr nocapture noundef %ptr, i8 noundef zeroext %val) local_unnamed_addr #0 {
; CHECK-LABEL: atommax1:
; CHECK:       # %bb.0: # %entry
; CHECK-NEXT:    sync
; CHECK-NEXT:  .LBB10_1: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    lbarx 5, 0, 3
; CHECK-NEXT:    cmplw 1, 5, 4
; CHECK-NEXT:    bgt 1, .LBB10_3
; CHECK-NEXT:  # %bb.2: # %entry
; CHECK-NEXT:    #
; CHECK-NEXT:    stbcx. 4, 0, 3
; CHECK-NEXT:    bne 0, .LBB10_1
; CHECK-NEXT:  .LBB10_3: # %entry
; CHECK-NEXT:    li 3, 55
; CHECK-NEXT:    li 4, 66
; CHECK-NEXT:    lwsync
; CHECK-NEXT:    isel 3, 4, 3, 5
; CHECK-NEXT:    blr
;
; AIX32-LABEL: atommax1:
; AIX32:       # %bb.0: # %entry
; AIX32-NEXT:    rlwinm 5, 3, 3, 27, 28
; AIX32-NEXT:    li 7, 255
; AIX32-NEXT:    sync
; AIX32-NEXT:    xori 5, 5, 24
; AIX32-NEXT:    rlwinm 3, 3, 0, 0, 29
; AIX32-NEXT:    slw 6, 4, 5
; AIX32-NEXT:    slw 7, 7, 5
; AIX32-NEXT:    and 8, 6, 7
; AIX32-NEXT:  L..BB10_1: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    lwarx 9, 0, 3
; AIX32-NEXT:    and 10, 9, 7
; AIX32-NEXT:    cmplw 10, 6
; AIX32-NEXT:    bgt 0, L..BB10_3
; AIX32-NEXT:  # %bb.2: # %entry
; AIX32-NEXT:    #
; AIX32-NEXT:    andc 10, 9, 7
; AIX32-NEXT:    or 10, 8, 10
; AIX32-NEXT:    stwcx. 10, 0, 3
; AIX32-NEXT:    bne 0, L..BB10_1
; AIX32-NEXT:  L..BB10_3: # %entry
; AIX32-NEXT:    srw 3, 9, 5
; AIX32-NEXT:    lwsync
; AIX32-NEXT:    clrlwi 3, 3, 24
; AIX32-NEXT:    cmplw 3, 4
; AIX32-NEXT:    li 3, 55
; AIX32-NEXT:    li 4, 66
; AIX32-NEXT:    iselgt 3, 4, 3
; AIX32-NEXT:    blr
entry:
  %0 = atomicrmw umax ptr %ptr, i8 %val seq_cst, align 1
  %cmp.not = icmp ugt i8 %0, %val
  %conv3 = select i1 %cmp.not, i8 66, i8 55
  ret i8 %conv3
}
